【问题标题】:How to programmatically trigger a D3 drag event?如何以编程方式触发 D3 拖动事件?
【发布时间】:2013-01-26 13:42:34
【问题描述】:

所以我有一些与拖动事件侦听器绑定的数据:

myNodes.enter()
    .append("svg:g")
    .call(d3.behavior.drag()
        .on("drag", function() { 
            console.log(d3.event.dx, d3.event.dy);
        })
    );

现在我想以编程方式在某个节点上调用这个 onDrag 函数。我确实知道标准事件也可以这样做

aNode.on("click")() // works
aNode.on("drag")()  // doesn't work

有什么办法吗?谢谢。

【问题讨论】:

  • 你能设置一个jsfiddle吗?像这样,您的代码似乎可以工作,或者我不明白您想要什么行为。
  • 我想触发拖动功能,而无需将鼠标移动一个像素。由于无需实际单击即可触发“单击”事件,我想知道鼠标移动是否也可以这样做。原因是我的窗口是动态调整大小的,所以鼠标位置相对不一样。如果我仍然不清楚,请告诉我,我会看看我能用 jsfiddle 做什么,谢谢。
  • 我问并回答了一个类似的问题stackoverflow.com/questions/64289838/…

标签: javascript d3.js


【解决方案1】:

将回调(您传递给拖动处理程序的回调)保存在一个变量中,然后在您的其他上下文中调用此变量。

var dragCallback = function(){
  console.log(d3.event.dx, d3.event.dy);
};
var dragBehavior = d3.behavior.drag()
                     .on("drag", dragCallback);
myNodes.enter()
  .append("g")
  .call(dragBehavior);
  //Call drag method programmatically
  dragCallback()

【讨论】:

  • 如果目标是用于测试(未在问题中说明),那么此解决方案可能不实用。代码在不暴露回调的情况下可能是正确的——但是如何测试呢?
  • 对不起,我只是看到你的答案(不习惯 SO)。该解决方案将完美地解决我的问题。那时我是异步编程的新手,现在完全可以理解了,谢谢。
  • @BausTheBig 你好,我的问题很相似但又不一样,这让我很伤心:stackoverflow.com/questions/29617031/…你能帮忙吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多