Events d3.js-转换中断事件?

Events d3.js-转换中断事件?,events,d3.js,transition,Events,D3.js,Transition,我想知道如何处理d3.js中中断的转换不会触发结束事件这一事实。正如API文档所说 请注意,如果转换被稍后的计划替换 在给定元素上进行转换时,不会为其调度结束事件 该要素;中断的转换不会触发结束事件。 发件人: 在我的例子中,转换是由用户交互触发的。当用户通过单击鼠标触发新的转换时,这些转换可能会中断。假设在第一次转换中,元素将淡出,并在转换结束时被删除。如果此转换被中断,元素将永远不会被删除。我可以在转换过程中禁止进一步的用户交互,但这并不是我真正想要的(特别是我有后退和前进按钮,允许用户快速

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

请注意,如果转换被稍后的计划替换 在给定元素上进行转换时,不会为其调度结束事件 该要素;中断的转换不会触发结束事件。 发件人:

在我的例子中,转换是由用户交互触发的。当用户通过单击鼠标触发新的转换时,这些转换可能会中断。假设在第一次转换中,元素将淡出,并在转换结束时被删除。如果此转换被中断,元素将永远不会被删除。我可以在转换过程中禁止进一步的用户交互,但这并不是我真正想要的(特别是我有后退和前进按钮,允许用户快速点击svg图形的先前状态…),基本上我需要一个“中断事件”

谢谢


马丁

我认为没有真正令人满意的方法来做到这一点。一个有点痛苦的解决方法是计算当前发生的转换的数量,并从中进行推理

因此,初始化:

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 --; });

如果您可以像这样手动清理中断的转换,这将很好。请注意,您不能使用“开始”事件来增加计数器,因为在计划转换和启动转换之间存在延迟,因此您可以在那里获得竞争条件。

在触发新转换的代码中,您可以检查上一个转换是否已完成,如果没有,则执行需要执行的操作,例如,删除元素。谢谢Lars,我考虑过这一点,但如果你有一个可能的转换网络,它似乎并不真正适用。这里的主要问题似乎是,如果以这种方式实现,那么中断的处理就不会与转换本身一起声明。不幸的是,没有生成“中断”事件,因此目前我看不到其他处理方法。也许打开一个功能请求?是的,它似乎真的缺少一些东西。在打开功能请求之前,如果有人提出其他解决方案,我将稍等。对不起,我不知道在哪里可以打开功能请求,现在找不到它