我可以使用d3转换来错开任意函数的执行,如果可以,如何使用?

Can I use a d3 transition to stagger execution of an arbitrary function, and if so, how?

本文关键字:执行 如果可以 何使用 函数 任意 d3 可以使 转换 我可以      更新时间:2023-09-26

我有一个比较复杂的update()函数,它对一个名为tool_animations的大数组的每个元素执行。

与其在这个函数中进行转换,不如将函数本身错开执行:

playback_transition = d3.transition()
.delay(function(){ return (elem_dur_in_ms * curr_index); })
.duration(0);
d3.selectAll(tool_animations)
    .each(function() {
        this.update();
});

虽然滥用了转换,但我最初认为我可能会得到下面这样的工作。(现在很清楚,这只是将转换的参数传递给update()调用)。

d3.selectAll(tool_animations)
    .each(function() {
        var curr_arr_elem = this;
        playback_transition.call(curr_arr_elem.update);
});

知道我如何错开更新调用本身吗?感谢任何建议,最好是基于3d,没有jQuery。谢谢:-)

D3允许您向转换添加事件侦听器。也就是说,您可以在转换开始或结束时调用函数。在您的情况下,可以使用"end"侦听器错开调用。只需像以前一样初始化带有延迟的转换,并添加以下代码:

.each("end", functionToCall);

可以使用setTimeout:

d3.selectAll(tool_animations)
    .each( function(d,i) {
        var curr_arr_elem = this;
        setTimeout( function () {
            playback_transition.call(curr_arr_elem.update);
        }, i * 100 );
    });
相关文章: