如何防止在mouseup之后触发mouseleave



在我的Javascript应用程序中,我遇到了事件冒泡的问题,也就是说,我不想在鼠标悬停在元素上后触发mouseleave(已经实现了拖动行为,因此它会移动,鼠标会离开它)。

我该怎么做?

编辑

我使用d3.js以以下方式捕获事件:

d3.selectAll("circle")
        .on("mouseover", function(d,i){
        ...
        }
        .on("mouseup", function(d,i){
        ...
        }
        .on("mouseleave", function(d,i){
        ...
        }

使用类似的布尔check变量怎么样

var preventBubble = true;
d3.selectAll("circle")
        .on("mouseover", function(d,i){
        ...
        }
        .on("mouseup", function(d,i){
        preventBubble = false;
        ....
        }
        .on("mouseleave", function(d,i){
        if(preventBubble) {         
        ...
          }
        }

与其使用mouseovermouseleave,我更愿意使用带有回调的.hover()

d3.selectAll("circle").on("hover", function(d,i){
    //To Dos
  }, function(d,i) {
    // callback To Dos
});

我已经用类似于user1671639的带有布尔检查的设备的方法解决了它:

var been_in_mouseup = false;
.on("mousedown", function(d){
    ...
    been_in_mouseup = false;
})
.on("mouseup", function(d,i){
    ...
    been_in_mouseup = true;
})
.on("mouseleave", function(d, i){
    ...
    if(false == been_in_mouseup )
    {
    ...
    }
})

编辑

还有更优雅的方法吗?

相关内容

  • 没有找到相关文章

最新更新