Обычно это называется debouncing
. Вот хорошая статья , касающаяся регулирования и устранения помех.
Метод Debounce позволяет нам «группировать» несколько последовательных вызовов в один.
В статье перечислено несколько реализаций, но пример реализации может быть (эта версия будет вызывать событие в конце ваших многочисленных вызовов, как только они перестанут срабатывать в течение указанного периода времени ):
function debounce(callback, duration) {
let timer = null;
let args = [];
let thisVal = null;
function trigger() { callback.apply(thisVal, args); }
function onEvent() {
thisVal = this;
args = [].slice.call(arguments);
clearTimeout(timer);
timer = setTimeout(trigger, duration);
}
return onEvent;
}
Тогда вы можете позвонить, используя следующий код, например:
function myEventListener(data) {
// do your thing
}
window.addEventListener('my-event', debounce(myEventListener, 100));
, что предотвратит повторный вызов вашего прослушивателя событий, пока он не перестанет срабатывать хотя бы на 100 мс.