我对"绕D3.js代码有一些问题。
我创建了许多圆圈,并在其中投入了每秒更新的时间,但是这很快就会导致不同的浏览器崩溃或冻结。
从一些谷歌搜索中,我认为我的问题是一段时间后元素太多,但我没有弄清楚如何在不发生此问题的情况下更新它。
代码中存在问题的部分:
oranges.append("circle")
.attr("cx", function (d) {return d*2;})
.attr("cy", function (d) {return d*2;})
.attr("r", function (d) {return d/2;})
.attr("fill", "orange")
.attr("stroke", "red")
.attr("stroke-width", "4px")
var timeoranges = oranges.append("text")
.attr("x", function (d) {return d*2 - 15;})
.attr("y", function (d) {return d*2;})
.attr("dy", ".35em");
function updateOranges() {
timeoranges.text(function() {
setTimeout(updateOranges, 1000);
return Date();});
}
updateOranges();
将针对timeoranges
选择中的每个元素调用您传递给timeoranges.text
的函数。 因此,如果你有一个 100 个圈子,你setTimeout
100 次,而setTimeout
又叫 100 次,依此类推......
我想你的意思是:
function updateOranges() {
timeoranges.text(function() {
return Date();
});
setTimeout(updateOranges, 1000);
}
updateOranges();