Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止鼠标点击后触发鼠标删除?_Javascript_D3.js_Event Handling_Dom Events_Event Bubbling - Fatal编程技术网

Javascript 如何防止鼠标点击后触发鼠标删除?

Javascript 如何防止鼠标点击后触发鼠标删除?,javascript,d3.js,event-handling,dom-events,event-bubbling,Javascript,D3.js,Event Handling,Dom Events,Event Bubbling,在我的Javascript应用程序中,我遇到了事件冒泡的问题,也就是说,我不希望在鼠标移动到元素上后触发mouseleave(已经实现了拖动行为,因此它会移动,鼠标会离开) 我该怎么做 编辑 我使用d3.js以以下方式捕获事件: d3.selectAll("circle") .on("mouseover", function(d,i){ ... } .on("mouseup", function(d,i){ ...

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

我该怎么做

编辑

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

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

让一个像这样的布尔
检查
变量怎么样

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) {         
        ...
          }
        }
与其使用
mouseover
mouseleave
,我更愿意使用带有回调的
.hover()

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

让一个像这样的布尔
检查
变量怎么样

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) {         
        ...
          }
        }
与其使用
mouseover
mouseleave
,我更愿意使用带有回调的
.hover()

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

我用类似于user1671639的advice的布尔检查方法解决了这个问题:

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 )
    {
    ...
    }
})
编辑


还有更优雅的方法吗?

我用类似于user1671639的advice和boolean check的方法解决了这个问题:

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 )
    {
    ...
    }
})
编辑


有没有更优雅的方法可以做到这一点?

您是否使用了任何库,您是否有正在使用的代码示例?了解这些都很有帮助。
var dragging=false;函数mouseLeave(e){if(dragging)return;..}
?@ars265我在编辑中添加了此信息。您是否使用任何库,您是否有正在使用的代码示例?了解这些都很有帮助。
var dragging=false;函数mouseLeave(e){if(drawing)return;..}
?@ars265我在编辑中添加了此信息。