运行javascript函数,但不要让它在x秒内重新运行
Run javascript function but then don't allow it to rerun for x seconds
如何立即运行javascript函数,但不允许该函数再次运行x秒?
下面的代码确实添加了延迟,但它随后会多次触发函数disableKeyboardDateinputTest。
function disableKeyboardDateinputTimer() {
setTimeout(function(){
disableKeyboardDateinputTest();
}, 1000);
}
disableKeyboardDateinputTest();
window.addEventListener('resize', disableKeyboardDateinputTimer);
防止函数被过多调用通常被称为'throttling'。lodash(和underscore)库有一个节流函数https://lodash.com/docs/4.16.1#throttle。你可以这样使用:
function functionToThrottle() {
//...
console.log('Called');
}
var x = 10; // seconds
var throttledFunction = _.throttle(functionToThrottle, x * 1000);
for (var i = 0; i < 10; i++) {
throttledFunction();
}
您需要考虑是否需要前置呼叫(第一个呼叫立即发生)和/或尾随呼叫(如果在节流期间发生任何呼叫,则在周期结束时将发生单个呼叫)。
这里有一篇关于这个主题的好文章:https://css-tricks.com/debouncing-throttling-explained-examples/
如果你愿意使用Lodash,你可以使用它的throttle
助手。
创建一个节流函数,每隔等待毫秒最多只调用一次func。
相关文章:
- javascript无法重新定义函数内部的全局对象
- Javascript:如何在页面重新加载后运行函数
- 当输入被禁用或重新启用时,如何运行函数
- 当屏幕方向改变时,重新运行javascript函数
- 等待使用settimeout的函数在javascript中完成后再重新运行
- AngularJS指令——在作用域参数改变时重新运行link函数
- 不能正确地重新运行带有if语句的for循环函数
- onclick重新运行Jquery函数
- 存储局部变量,然后重新运行函数
- jQuery AJAX中另一个函数完成后,重新运行原函数
- 当路由改变时,重新运行所有angular object指令(不仅仅是link函数)
- 运行javascript函数,但不要让它在x秒内重新运行
- 删除子节点后,我无法重新运行函数本身
- 如何在模型绑定后重新运行指令的link函数
- 强制ng-repeat在数据绑定中重新运行函数
- SetInterval重新运行函数
- 对resize noconflict重新运行jquery函数
- 在外部脚本函数结束时重新运行内联脚本
- jQuery:更新全局var并重新运行函数
- 当用户单击任意liq .eq(i)时,重新运行函数