0

我正在努力实现一些不难做到的事情,但到目前为止我所做的一切都没有奏效。

我有一个功能,每次单击按钮时都会更改一个值,而我想要的是:当我按住此按钮时,该值应该不断变化。

这是我尝试过但没有奏效的方法,setInterval 和 setTimeout 不会“等待”(函数 get 立即被调用数千次,网站崩溃):

    $('.buttonPlus').mousedown(function() {
        timeoutID =setTimeout(distribucionPorcentual($(this)),1000);
    }).bind('mouseup mouseleave', function() {
        clearTimeout(timeoutID);
    });

任何帮助将不胜感激。谢谢!

4

2 回答 2

0

您的代码是一团糟的错误(一个错位的分号,两个丢失的括号等)。在任何现代浏览器上,JS 都会阻止事件绑定——你是在 IE 上测试的吗?

如果你是,这里是一个更正的版本:http ://tinker.io/fd2da 。我还修复了调用中的一个小问题setTimeoutthis在 setTimeout 闭包调用中为 null)。

编码:

 // stub the calls
 function distribucionPorcentual(arg) {
 }
 function distribution(arg) {
    console.log(arg);
 }
 $(document).ready(function(){
    $('.buttonPlus').mousedown(function() {
    console.log("Test");
        distribucionPorcentual($(this));
    var t = $(this);
       timeoutID =setTimeout(function() {distribution(t); },1000);
    }).bind('mouseup mouseleave', function() {
    console.log("Mouseup");
    clearTimeout(timeoutID);
    });
 });

您可能希望在 setTimeout 内绑定 mouseup/mouseleave 以使您不必处理全局变量。

于 2013-05-24T13:58:03.403 回答
0

我知道这是一个非常古老的线程,但如果有人偶然发现它(我刚刚做过),你可能会发现这很有用。我需要能够做一个简单的增量,但如果鼠标保持一秒钟,那么它会进入一个快速增量。这类似于按键在许多系统上的行为方式。

    $('#forward-step').mousedown(function() {
    adjustPosition(1)
    var cancel = false;
    repeatDelayTimer = setTimeout( function() {
        if (!cancel) {
            repeatTimer = setInterval(function() {adjustPosition(1); },50);
        }
    },1000 )
    
    t.bind('mouseup mouseleave', function() {
        cancel = true;
        console.log("Mouseup");
        clearInterval(repeatTimer);
        clearTimeout(repeatDelayTimer);
    });
});
于 2022-02-13T22:07:33.173 回答