运行javascript函数,但不允许它重新运行x秒

运行javascript函数,但不允许它重新运行x秒,javascript,Javascript,如何立即运行javascript函数,但不允许该函数在x秒内再次运行 下面的代码确实添加了延迟,但随后会多次触发函数disableKeyboardDateinputTest function disableKeyboardDateinputTimer() { setTimeout(function(){ disableKeyboardDateinputTest(); }, 1000); } disableKeyboardDateinputTest(); window.addEv

如何立即运行javascript函数,但不允许该函数在x秒内再次运行

下面的代码确实添加了延迟,但随后会多次触发函数disableKeyboardDateinputTest

function disableKeyboardDateinputTimer() {
  setTimeout(function(){
    disableKeyboardDateinputTest();
  }, 1000);
}

disableKeyboardDateinputTest();
window.addEventListener('resize', disableKeyboardDateinputTimer);

如果你愿意使用Lodash,你可以使用它的助手

创建一个限制函数,该函数最多每等待毫秒调用一次func


防止函数被过度调用通常称为“节流”。lodash和下划线库具有节流功能。您可以这样使用它:

function functionToThrottle() {
  //...
  console.log('Called');
}

var x = 10; // seconds

var throttledFunction = _.throttle(functionToThrottle, x * 1000);

for (var i = 0; i < 10; i++) {
  throttledFunction();
}
你需要考虑你是否想要领先的呼叫第一次呼叫立即发生和/或尾随呼叫如果任何呼叫发生在节流期间,一个呼叫将在该期间结束时发生


这里有一篇关于这一主题的好文章:

你尝试了什么?你的代码是什么?@Evans你要找的通常是一个函数的去Bouncing…为了让你开始正确的轨道,我想你的问题可能是resize启动了多次并触发了你的手柄。你能回答这个问题而不需要简单的修改吗链接到外部库…?当然,你可以自己写。但重点是什么?教育也许…?他可以通过查看Lodash的代码来教育自己。是否真的需要为这一特性加载库?