d3.js - 过渡中断事件?

时间:2013-10-30 11:20:46

标签: events d3.js transition

我想知道如何处理d3.js中的中断转换不会触发结束事件的事实。正如API文档所说

  

请注意,如果转换被后续计划取代   对给定元素进行转换,不会调度任何结束事件   那个元素;中断的转换不会触发结束事件。   来自:https://github.com/mbostock/d3/wiki/Transitions#control

在我的情况下,转换是由用户交互触发的。当用户通过鼠标单击触发新的转换时,这些转换可能会中断。让我们说在第一次转换中,一个元素意味着淡出并在转换结束时被删除。如果此转换中断,则永远不会删除该元素。在转换发生的时候,我可能不允许进一步的用户交互,这实际上并不是我想要的(特别是因为我有后退和前进按钮,允许用户快速点击我的svg图的先前状态...)基本上我会需要“中断事件”

由于

马丁

1 个答案:

答案 0 :(得分:1)

我认为没有真正令人满意的方法来做到这一点。一个有点痛苦的解决方法是计算当前正在发生的转换次数和推理。

所以,初始化:

var transitionCount = 0;

无论何时安排新的转换:

if ( transitionCount != 0 ) {
    // handle interrupted transitions here somehow
    transitionCount = 0;
}
var myTransition = selection.transition().... ; 
transitionCount += myTransition.size();
myTransition.each('end', function() { transitionCount --; });

如果您可以手动清理这样的中断转换,这没关系。请注意,您无法使用' start'增加计数器的事件,因为在安排转换和启动转换之间存在延迟,因此您可以在那里获得竞争条件。