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