Две небольшие общие реализации подходов регулирования.(Я предпочитаю делать это с помощью этих простых функций, а не добавлять другой плагин jquery)
Ожидание через некоторое время после последнего вызова
Это полезно, когда мы нехотите, например, вызвать функцию поиска, когда пользователь продолжает набирать запрос
function throttle(time, func) {
if (!time || typeof time !== "number" || time < 0) {
return func;
}
var throttleTimer = 0;
return function() {
var args = arguments;
clearTimeout(throttleTimer);
throttleTimer = setTimeout(function() {
func.apply(null, args);
}, time);
}
}
Вызывает данную функцию не чаще, чем заданное количество времени
Следующее полезно для очистки журналов
function throttleInterval(time, func) {
if (!time || typeof time !== "number" || time < 0) {
return func;
}
var throttleTimer = null;
var lastState = null;
var eventCounter = 0;
var args = [];
return function() {
args = arguments;
eventCounter++;
if (!throttleTimer) {
throttleTimer = setInterval(function() {
if (eventCounter == lastState) {
clearInterval(throttleTimer);
throttleTimer = null;
return;
}
lastState = eventCounter;
func.apply(null, args);
}, time);
}
}
}
Использование очень просто:
Следующий код ожидает 2 секунды после последнего нажатия клавиши в inputBox, а затем вызывает функцию, которую нужно регулировать.
$("#inputBox").on("input", throttle(2000, function(evt) {
myFunctionToThrottle(evt);
}));
Вот пример, где вы можете проверить оба: нажмите (CodePen)