我有一个 Javascript 代码,每次按下按钮时都会执行一个函数,但是,我的硬件设置偶尔会发送双重输入(即按下按钮两次) - 当这种情况发生时,它们相隔几毫秒。是否可以限制 javascript 在 50 毫秒内执行两次函数?
问问题
4998 次
3 回答
5
是否可以限制 javascript 在 50 毫秒内执行两次函数?
是的,您必须跟踪上次运行该函数的时间。就像是:
var lastTime = 0;
function buttonPressed() {
var now = new Date().getTime();
if(now-lastTime > 50) {
// do stuff
}
lastTime = now;
}
于 2012-08-09T01:27:29.380 回答
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"
于 2012-08-09T01:42:07.657 回答
0
是的你可以。在您第一次单击(或按键)时设置一个标志。设置一个计时器来清除它。仅在未设置标志时继续您的按键或单击操作。
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/
也就是说,这是您机器上的硬件问题,还是预期在每台机器上都会使用此应用程序/页面?
于 2012-08-09T01:30:56.860 回答