d3 给元素添加click事件,为何点击2次才生效?

发布于 2022-09-06 21:53:48 字数 1016 浏览 24 评论 0

.point-create 为点
.tipArrow-create为箭头
`showTipArrow=()=>{

d3.selectAll('.point-create').on('click',function(){//选择所有的点添加点击事件
  let $thisDom=d3.select(this);
  d3.selectAll('.tipArrow-create').filter(function(d,i,list){
    let arrowDom=d3.select(this);
    if(arrowDom.attr('regId')==$thisDom.attr('regId')){//匹配点是否跟箭头的regId一致
      arrowDom.attr('display','');
    
    }
  });
});
}`

点是动态添加的,showTipArrow函数位置放在动态添加点函数里面,
 d3.select('#points').append('use')
          .attr('id', 'red_'+thisId)
          .attr('regId',thisId)
          .attr('type', 'point')
          .attr('x', width-10)
          .attr('y', cyRed-10)
          .attr('yy',cyRed)
          .attr('class', 'point-create')
          .attr('xlink:href','#point')
          .call(d3.drag()
              .on('start', dragstarted)
              .on('drag', dragged)
              .on('end', dragended));
       this.showTipArrow();       

结果就是需要点击2次的时候添加的click函数才会生效,有人知道怎么回事吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

二货你真萌 2022-09-13 21:53:48

我把添加的drag事件去掉以后就正常了?

骷髅 2022-09-13 21:53:48

我也碰到了这个问题,一直没找到相关的答案,直到自己发现了问题。

d3 版本:7.6.1

问题关键点:我在 dragstart 的时候 raise 了节点,就会导致这个节点无法触发 click,第二次点击的时候不会变化节点的顺序,所以可以触发 click 事件。

解决方案:把 raise 的操作改到 drag 中去做,不要在 start 的时候就可以了。

虽然不知道题主是什么情况,但是希望可以为后人提供帮助。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文