gpt4 book ai didi

javascript - d3.js:不为 enter() 调用转换回调

转载 作者:行者123 更新时间:2023-11-30 07:41:24 24 4
gpt4 key购买 nike

我正在使用这个 D3 tutorial bar chart 的修改版本.

对我来说重要的是动画不应该在离开浏览器窗口时堆叠然后在窗口再次成为焦点时触发所有动画,导致浏览器挂起,所以根据 this suggestion ,我正在尝试使用 setTimeout 而不是动画结束时应调用的 setInterval

我在回调方面遇到问题,我不明白为什么简单的 transition() 回调有效,但 enter() 却无效。

设置图表和刻度后,我的初始化函数如下所示:

function redrawTimer() {
data.shift();
data.push(next());
redraw(function(){
console.log('callback');
setTimeout(redrawTimer, 1500);
});
}

setTimeout(redrawTimer, 1500);

function redraw(callback) {

var rect = chart.selectAll("rect")
.data(data, function(d) { return d.time; });

rect.enter().insert("rect")
.attr("x", function(d, i) { return x(i + 1) - .5; })
.attr("y", function(d) { return h - y(d.value) - .5; })
.attr("width", w)
.attr("height", function(d) { return y(d.value); })
.attr("fill", "white")
.attr("fill-opacity", 0.2)
.transition()
.duration(1000)
.attr("x", function(d, i) { return x(i) - .5; })
.each('end', callback); // Doesn't work at all

rect.transition()
.duration(1000)
.attr("x", function(d, i) { return x(i) - .5; });
//.each('end', callback); // Works but for each of the 50 elements

rect.exit().transition()
.duration(1000)
.attr("x", function(d, i) { return x(i - 1) - .5; })
//.each('end', callback) // This only works after the first transition so using it to trigger the next data point is useless
.remove();
}

参见 this jsFiddle为了摆弄代码:)

可能是我不完全理解 transition()enter()exit() 上的工作方式有何不同,或者只是选择器。

你能给我讲讲吗?

如果您可以使回调工作,但不能解决我上面提到的问题(浏览器离开时的动画),请也帮助我解决这个问题,因为我会赞成您的评论/回答。

编辑:

我设法通过测试过渡已结束的元素来摆脱动画队列的堆积,并且只取最后一个:

rect.transition()
.duration(1000)
.attr("x", function(d, i) { return x(i) - .5; })
.each('end', function(d, i){
if(i == 49)
callback();
});

最佳答案

元素一次只能有一个事件过渡。 rect.enter().transtition() 立即被 rect.transition() 覆盖(rect 是更新选择,它还包含输入元素!)。因此 rect.enter().transition().each('end', callback) 永远不会被调用。

有关详细信息,请参阅 API documentation on transitionsMike's tutorial .

关于javascript - d3.js:不为 enter() 调用转换回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com