Я ищу простой семантический способ кодирования jQuery, который позволяет разумный тайм-аут или другой способ «замедления» скорости, с которой увольняются события, для того, чтобы чтобы пользователь не мог рассылать спам (специально или невольно) мои обработчики.jQuery - как остановить использование обработчиков событий spamming
Это обычно не касается меня лично, так как в большинстве случаев достаточно просто прекратить работу предыдущего обработчика - например, это затухающее меню; просто используя .stop()
на анимации достаточно.
Однако я сейчас создаю гораздо более тяжелую страницу js, чьи события просто слишком дороги, чтобы срабатывать более одного или двух секунд в секунду, и несколькими способами уволить эти события мне нужно ограничить, как часто они будет выполняться на более базовом уровне.
Пример задачи:
$(document).bind('mousewheel', function(e, delta){
alert('you scrolled the mousewheel!');
stopLoadsOfStuff();
fadeHalfADozenImagesInAndOutAgain();
});
Я использую плагин (колеса мыши здесь: http://brandonaaron.net/code/mousewheel/docs) в зависимости от мыши, операционной системы или производителя программного обеспечения поставляется, скорость прокрутки может отличаться друг от друга. Подумайте, одна из тех блестящих мышей с яблочным прикосновением против старой шаровой мыши от 90-х годов. Если вы запускаете событие в прокрутке, вы обнаружите, что вам нужно ограничить его чем-то разумным, если ваше мероприятие очень дешево для выполнения и остановки.
Вещи я уже пробовали это:
Для кликов и событий клавиатуры:
устанавливающих логическое значение для каждого события, установив его на истинный в то время как событие срабатывает и с помощью обратного вызова, чтобы установить его снова false. Событие выполняется только в том случае, если bool является ложным. Это сработало, но беспорядочно и немного слишком специфично.
Для MouseWheel событий:
Я увеличиваем целочисленную переменную каждый раз, когда обнаруживается событие MouseWheel, и только принять меры, если это больше, чем 5. Обработчик сбрасывает его в 0 при выполнении.
Т.Л., др
Мне нужен расширяемый, простой способ ограничить скорость выполнения обработчиков событий, которое позволит мне использовать дорогие обработчик событий, не беспокоясь о пользователе попытки выполнить их 100 раз в второй :)
Любая помощь оценили
Вы ищете ** событие debouncing/throttling **. Не знаю, достаточно ли этого для ваших целей: http://benalman.com/projects/jquery-throttle-debounce-plugin/ –