如果“mousemove”和“click”事件同时触发怎么办?

2024-01-09

不知道是否只是Chrome问题(现在无法检查),但是让我们尝试下面的代码,我们将两个事件绑定到某个元素:

$("div").on({
    mousemove: function(e) {
        console.log("move");
    },
    click: function(e) {
        console.log("click");
    }
});

如果我们尝试单击该元素,我们会发现由于某种原因mousemove单击后立即触发事件,因此在控制台中我们有:

>> ...
>> click
>> move

DEMO: http://jsfiddle.net/gKqVt/ http://jsfiddle.net/gKqVt/

注意mousedown and mouseup事件按照相同的场景进行。

我在 SO 上看到了很多关于同一问题的问题,但没有一个(在我的搜索中)给出了如何直接触发的想法click event only.


Mousemove 似乎与 Chrome 中的每个鼠标操作绑定在一起,因此每次鼠标“移动”时都会存储鼠标位置,并对照之前的鼠标位置进行检查,以验证它确实已“移动”。

var currentPos=[];
$("div").on({
    mousemove: function(e) {
        if (e.pageX!==currentPos[0] && e.pageY !==currentPos[1]){
            currentPos=[e.pageX,e.pageY];
        this.innerHTML = "Event: " + e.type;
        console.log("move");
        }
    },
    click: function(e) {
        this.innerHTML = "Event: " + e.type;
        console.log("click");
    }
});

Demo http://jsfiddle.net/gKqVt/8/show | Source http://jsfiddle.net/gKqVt/8/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果“mousemove”和“click”事件同时触发怎么办? 的相关文章

随机推荐