首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >d3拖拽鼠标点击事件不着火

d3拖拽鼠标点击事件不着火
EN

Stack Overflow用户
提问于 2018-01-03 05:52:50
回答 1查看 684关注 0票数 0

我正在处理d3的拖放功能,我遵循了链接

http://bl.ocks.org/robschmuecker/7880033

对于d3拖放功能,它按照d3 v3版本示例完美地工作,但我想要执行d3 v4,因此我查看了根据d3主更改进行的主更改。

https://github.com/d3/d3/blob/master/CHANGES.md

除了鼠标点击和双击事件之外,我把所有的更改都转换成了正常工作,所以我在d3论坛上讨论了这个问题,并找到了一些解决方案。

为什么单击事件总是会触发?

但这仍然是公开的还是封闭的,你能知道如何解决这个问题吗?让我知道,分享links.Thanks。

代码语言:javascript
运行
复制
var nodeEnter =  node.enter().append('g').call(d3.drag()                                     
                                .on("start", dragstarted)
                                .on("drag", dragged)
                                .on("end", dragended)).on("click",collapse)
                              .on("mouseover", overCircle)                                
                             .on("mouseout", outCircle)                   
                             .attr('class', 'node')
                             .attr('cursor', 'pointer')                                 
                             .attr("transform", function (d) {
                                return "translate(" + source.y0 + "," + source.x0 + ")";
                                   });

对于单击事件,我需要展开并折叠到子node.for --这个场景中,单击没有触发,但是如果没有拖放事件单击,则可以正常工作。

EN

回答 1

Stack Overflow用户

发布于 2018-01-03 09:26:06

D3的drag()行为拦截点击事件,并测量鼠标在鼠标按钮下降和鼠标按钮上升之间移动了多少。如果鼠标指针移动了两个事件之间的距离,那么它将阻止click事件的触发。因此,一个非常快,轻点击一个物体一般会工作,但一个更重,较慢的一个将不会。

单击为单击的距离为零像素,但幸运的是,您可以使用clickDistance函数更改这一点。尝试:

代码语言:javascript
运行
复制
node.enter().append('g').call(d3.drag()
   .clickDistance(1)
   .on("start", [etc.]

然后看看如何调整给定的值(1可能完成它,您可能希望或多或少)为您工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48071893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档