JavaScript 双函数执行
javascript double function execution
我有一个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/
也就是说,这是您计算机上的硬件问题,还是在将使用此应用程序/页面的每台计算机上都存在此问题?
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环