手动重启d3拖动

时间:2015-07-05 13:15:35

标签: javascript d3.js

我尝试使用2个单独的拖动行为,具体取决于节点是否被保持超过一秒,或者只是立即拖动。通过使用带有鼠标和mousedown的计时器并将其存储在" nodeHeld"中,我可以轻松地识别保持行为。变量。但后来我遇到了将这个问题应用于拖拽......

如果我使用" d3.event.sourceEvent.stopPropagation();"在我的dragstart上,它可以将单个节点拖到它自己的上面。如果我省略stopPropagation行,那么另一个拖动侦听器(在画布上)确保拖动所有节点,即使我专门点击一个节点。但我想做的是使用我的" nodeHeld"变量,用于确定是否拖动所有节点或特定节点...

var drag = force.stop().drag()
                    .on("drag", function(d) { 
                        if (nodeHeld) { 
                            d3.event.sourceEvent.stopPropagation(); 
                            //this doesn't seem to do anything unless it's included at dragstart
                        }   
                    })
                    .on("dragstart", function(d) {
                        //d3.event.sourceEvent.stopPropagation(); 
                        //With the above commented out, a drag on a node drags all nodes
                        //I can't use the "nodeHeld" check here either, because it takes 
                        //a second or so to become "true" (by which point the drag has started)
                    });

正如我在上面的评论中所描述的那样,似乎stopPropagation只适用于dragstart(这对于我说是否已经保持节点来说还为时尚早)。

所以我真的希望在我计算出一个节点被保留后重新启动拖动行为,这样我就可以添加我的" if(nodeHeld) ..."检查一下dragstart。

感谢您的任何想法!

0 个答案:

没有答案