0

我正在尝试在鼠标按下时连续执行功能的东西。我让它无限循环,这正是我想要的,但我似乎无法再停止那个循环了。

我试着做:-

$(document).on("mouseup mouseout",".someclass",function(){ loop(false) } );

它采用 false 参数并且应该停止循环。但是循环只是无限地继续导致页面崩溃。我希望在调用某个事件时停止无限循环,无论是 mouseup、mouseout、mouseleave 中的哪一个。

到目前为止我的尝试:- http://jsfiddle.net/ZQTvN/

请意识到这会使您的浏览器崩溃。

4

1 回答 1

2

您可以更改代码以使用标志和 setTimeout 来实现您想要的:

像这样的紧密循环(忙循环)将阻止来自浏览器的任何输入,因此它基本上无法解析事件队列,即。浏览器被锁定。

通过实现 setTimout 来执行循环,您将允许浏览器也将其他事件排队,您需要检测何时停止它。

如果你每次都用一个参数调用你的循环,你实际上只会多次重新触发它。当您使用 false 标志调用时,该标志将是该调用的本地标志,并且对已启动的其他循环不执行任何操作,因为它们无权访问此本地化标志。

所以一种方法是将标志放在外面(通用标志,全局范围):

修改后的小提琴在这里

例子:

var doLoop = false;

function loopy() {
    if (doLoop === true) {
        setTimeout(function () {
            console.log(doLoop);
            loopy();
        }, 11);
    }

};
$(document).on("mousedown", ".classy", function () {
    doLoop = true;
    loopy();
});
$(document).on("mouseup mouseout", ".classy", function () {
    doLoop = false;
});

现在您可以看到循环在按住鼠标时运行,在释放时停止等。

于 2013-10-04T23:47:30.993 回答