Шаблон, который вы ищете, называется throttling .
Вот пример реализации функции газа:
const throttle = (func, limit) => {
let lastFunc
let lastRan
return function() {
const context = this
const args = arguments
if (!lastRan) {
func.apply(context, args)
lastRan = Date.now()
} else {
clearTimeout(lastFunc)
lastFunc = setTimeout(function() {
if ((Date.now() - lastRan) >= limit) {
func.apply(context, args)
lastRan = Date.now()
}
}, limit - (Date.now() - lastRan))
}
}
}
Функция получает функциюрегулируется как аргумент вместе с аргументом limit
, который представляет собой интервал в миллисекундах до следующего вызова функции.
Возвращает другую функцию, которая выполняет предоставленную функцию в указанный интервал.
Вы используете это так:
clicker1.addEventListener("click", throttle(nextImage, 1000), true);
Так что теперь, если кто-то "щелкает спамом"Если вы нажмете кнопку, функция nextImage
будет выполняться только каждую секунду.
Примечание : если вы используете Lodash, вы можете использовать собственную реализацию throttle _. throttle .