Javascript D3:几乎相同的代码,不同的结果
我试图运用建议来抓住几个过渡的结尾。 但是在我的本地文件中,我得到了一个Javascript D3:几乎相同的代码,不同的结果,javascript,d3.js,transition,jsfiddle,Javascript,D3.js,Transition,Jsfiddle,我试图运用建议来抓住几个过渡的结尾。 但是在我的本地文件中,我得到了一个未捕获的TypeError:t.call不是一个函数错误。代码如下: var svg = d3.select('svg'); function endall(transition, callback) { if (typeof callback !== "function") throw new Error("Wrong callback in endall"); if (transition
未捕获的TypeError:t.call不是一个函数
错误。代码如下:
var svg = d3.select('svg');
function endall(transition, callback) {
if (typeof callback !== "function") throw new Error("Wrong callback in endall");
if (transition.size() === 0) { callback() }
var n = 0;
transition
.each(function() { ++n; })
.each("end", function() { if (!--n) callback.apply(this, arguments); });
}
for (var i=0;i<5;i++) {
svg.append('rect')
.attr("x",i*60)
.attr("y",50)
.attr("height",50)
.attr("width",50)
.style("fill","#ff0000");
}
svg.selectAll("rect:not(.active)")
.transition()
.duration(1000)
.style("fill","#00ff00")
.call(endall, function() { alert("all done") });
var svg=d3.select('svg');
函数endall(转换,回调){
if(typeof callback!=“function”)抛出新错误(“endall中的回调错误”);
如果(transition.size()==0){callback()}
var n=0;
过渡
.each(函数(){++n;})
.each(“end”,function(){if(!--n)callback.apply(this,arguments);});
}
对于(var i=0;i而言,不产生错误的fiddle在v3上运行,而产生错误的fiddle在v5上运行
在d3v3中,您可以使用transition.each(“end”,…)
来表示事件:
转换。每个([type,]listener)
如果指定了类型,则为转换事件添加侦听器,
支持“开始”、“结束”和“中断”事件。侦听器将
为转换中的每个单独元素调用。()
在d3v4和v5中,此方法被替换为转换。对于事件:
selection.on(typenames[,listener[,options]])
将侦听器添加或删除到指定对象的每个选定元素
事件类型名称。()
转换。每个(函数)
仍然可以用于对正在转换的每个项目执行操作,但不能用于事件侦听。由于版本之间的这种更改,您会得到一个错误,即t.call不是函数(它是一个字符串:“end”
),警报永远不会触发
对于d3v4或d3v5,请改用:
transition
.each(function() { ++n; })
.on("end", function() { if (!--n) callback.apply(this, arguments); });
.对于javascript库来说,主要版本非常重要,而且显然JSFIDLE并没有对它们进行大量更新(我将发布一个与您类似的不太深入的答案,bravo在至少3分钟内击败了我:)