2012-08-09 55 views
0

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

+0

你试过睡眠()函数? – MimiEAM 2012-08-09 01:19:18

+0

@MimiEAM这是什么'sleep()'函数? – Pointy 2012-08-09 01:20:04

+0

你确定它的硬件问题? – 2012-08-09 01:21:18

回答

4

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

是的,您必须跟踪上次运行该功能的时间。例如:

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

+1为您的答案。 – 2013-04-20 14:23:39

0

是的,你可以。 在第一次点击(或按键)时设置一个标志。设置一个计时器清除它。 只有在未设置标志的情况下继续进行按键或点击操作。

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

完整的例子(用500ms的延迟一个现实演示):http://jsfiddle.net/nivas/FFLGw/

这就是说,这是你的机器上的硬件问题或者是预期的每台机器上,这个应用程序/页面会使用?

1

对于一个更通用的解决方案,这里是一个包装,使防止“反弹”的任何功能:

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"