1

我写了一个回调函数来记录鼠标事件:

var body = document.querySelector("body");
var callback = function (e) {
    console.log(e.type);
}

body.addEventListener('mousedown', callback, false);
body.addEventListener('mouseup', callback, false);
body.addEventListener('mousemove', callback, false);

让我困惑的是,当我点击时,除了触发mousedownmouseup事件之外,它也会触发mousemove事件。

在此处观看演示:http: //jsfiddle.net/r6Gqn/1/

为什么我不移动鼠标,而是触发mousemove事件?如何停止触发mousemove事件?

4

1 回答 1

0

我已经使用 jQuery 做了一个解决方法(对我来说更容易,我相信它可以适用于纯 js)。似乎没有人相信这种情况正在发生,但它在 Chrome 中也发生在我身上。(我把鼠标悬在空中,它不可能移动。)Chrome 存在一个针对它的错误。我无法在 FireFox 中重现它。

无论如何,这是我想出的解决方法。这里有一个演示:JsFiddle

$('#box').bind('mousemove', moved);

function moved() {
    console.log('mousemove');
}

$('#box').mousedown(function (ev) {
    console.log("mousedown");
});

$('#box').mouseup(function () {
    $("#box").unbind("mousemove");
    console.log("mouseup");
    setTimeout(function () {
        $("#box").bind("mousemove", moved);        
    }, 1);
});

基本上,这会将mouseup事件修改为 unbind mousemove,等待短的时间,然后重新绑定它。

于 2013-08-14T14:23:06.207 回答