无法在JS中重置setInterval

时间:2013-06-25 04:25:01

标签: javascript jquery setinterval

我想在按住鼠标的同时连续做一些事情,并在它被释放后停止它。所以我有以下代码:

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);
    });
});

但这不起作用!我永远不会停止做某事! //用y继续运行!

我在这里缺少什么?

由于

编辑:moousemove在这里是一个拼写错误,而不是我的代码。我的代码是mousemove。它仍然没有工作/

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

1 个答案:

答案 0 :(得分:3)

您正在对鼠标移动进行事件绑定,这将在document上创建大量的mousedown和mouseup事件。即使你试图做一个鼠标按下/ mouseup;鼠标移动将被触发,并作为一个链继续。而是将它们移出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);
});

<强> Fiddle

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