0

我想在按住鼠标时连续做一些事情,一旦松开就停止。所以我有以下代码:

var timeout;
var y;
$(document).mousemove(function(event){
    y = event.pageY;
    $(document).mousedown(function(){
        timeout = setInterval(function(event){
                       // Do something with y
                  }, 100);
    });
    $(document).mouseup(function(){
        clearInterval(timeout);
    });
});

但这不起作用!我永远无法停止做某事!//Do something with y 连续运行!

我在这里想念什么?

谢谢

编辑:mousemove 是这里的错字,不在我的代码中。我的代码是鼠标移动。它仍然无法正常工作/

编辑:我使用 mousemove 的原因是因为我想连续阅读 pageY。当我尝试在 setInterval() 中执行此操作时,它不起作用。如果我将它放在 mousedown 中,它只会读取一次。这就是为什么我把它放在 mousemove()

4

1 回答 1

3

您正在对鼠标移动进行事件绑定,这将在document. 即使您尝试进行鼠标按下/鼠标操作;鼠标移动将被触发,并作为链继续。而是将它们移出 mousemove 处理程序。

var timeout;
var y;

$(document).mousemove(function (event) {
    y = event.pageY;
});

$(document).mousedown(function () {
    timeout = setInterval(function (event) {
        // Do something with y
        console.log('mousedown ' + y);
    }, 100);
});
$(document).mouseup(function () {
    console.log('mouseup');
    clearInterval(timeout);
});

小提琴

您可以通过在原始代码的每个事件的回调入口点中放置一个 console.log 来自己验证这一点。您将能够看到每次执行 mousemove 时 mousedown 事件的数量都会增加。查看这个小提琴的控制台本身http://jsfiddle.net/eKy2T/

于 2013-06-25T04:31:03.110 回答