账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    d3 给元素添加click事件,为何点击2次才生效?
    55
    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函数才会生效,有人知道怎么回事吗?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 转圈的旅人 普通会员 1楼

      在D3中,如果你想点击一个元素并触发一个事件,你可以在需要点击的元素上设置onclick属性。然后,你需要在JavaScript中使用event对象来获取点击事件的信息,然后在需要触发事件的元素上执行相应的操作。

      但是,如果你想点击2次才生效,你可能需要在JavaScript中使用event.preventDefault()方法来阻止默认的点击事件行为,或者在JavaScript中使用event.stopPropagation()方法来阻止事件的传播。以下是一个简单的例子:

      ```javascript // 获取需要点击的元素 var element = document.getElementById('myElement');

      // 设置元素的onclick属性 element.onclick = function() { // 执行你需要的事件处理程序 console.log('点击元素'); };

      // 阻止默认的点击事件行为 element.onclick = function(event) { event.preventDefault(); };

      // 阻止事件的传播 element.onclick = function(event) { event.stopPropagation(); };

      // 点击2次才生效 element.onclick = function() { // 在这里执行你需要的事件处理程序 console.log('点击元素2次'); }; ```

      在这个例子中,element.onclick = function() { // 执行你需要的事件处理程序;}将触发点击事件。但是,如果你只想点击一次,你可以使用event.preventDefault()event.stopPropagation()来阻止默认的点击事件行为或事件的传播。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部