JavaScript 双函数执行

javascript double function execution

本文关键字:执行 函数 JavaScript      更新时间:2023-09-26

我有一个Javascript代码,每次按下按钮时都会执行一个函数,但是,我的硬件设置偶尔会发送双输入(即按两次按钮) - 当这种情况发生时,它们相隔一毫秒。 是否可以限制 JavaScript 在 50ms 的时间内执行该函数两次?

是否可以限制 JavaScript 在 50ms 的时间内执行两次函数?

是的,您必须跟踪上次运行该功能的时间。像这样:

var lastTime = 0; 
function buttonPressed() {
    var now = new Date().getTime();
    if(now-lastTime > 50) {
       // do stuff
    }
    lastTime = now; 
}

对于更通用的解决方案,这里有一个包装器可以防止任何函数的"反弹":

var preventBounce = function(fn, ms) {
    var _fn = fn;
    var _firedAt = false;
    var _ms = ms;
    return function() {
        var now = new Date().getTime();
        if(!_firedAt || (_firedAt + _ms) <= now) {
            _firedAt = now;
            return _fn.apply(this, arguments);
        }
    }
}

这允许您创建一个新函数,以防止在最后一次调用后的 ms 毫秒内调用该函数时触发。

例如:

test = preventBounce(alert, 5000);
test('example'); // alerts "example"
test('example'); // no action
// ...wait 5 seconds
test('example'); // alerts "example"

是的,你可以。在第一次单击(或按键)时设置标志。设置计时器以清除它。仅当未设置标志时,才继续按键或单击操作。

var within50ms = false;
function clicked()
{
    if(within50ms)
    {
        //the faulty click
    }
    else
    {
        //Go ahead
    }
    within50ms = true;
    var timer = setTimeout(function()
                           {
                               within50ms=false; 
                           }, 50);
}​

完整示例(真实演示延迟 500 毫秒):http://jsfiddle.net/nivas/FFLGw/

也就是说,这是您计算机上的硬件问题,还是在将使用此应用程序/页面的每台计算机上都存在此问题?