JQuery - как остановить пользователей спам обработчики событий - PullRequest
2 голосов
/ 30 января 2012

Я ищу простой и семантический способ кодирования обработчиков событий 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 раз в секунду:)

Любая помощь приветствуется

1 Ответ

2 голосов
/ 30 января 2012

Вас может заинтересовать плагин jQuery debounce .

Концепция плагина заключается в том, что он переносит обработчик, который вы передаете, в другую функцию, скорость которой ограничивает выполнение функции.просто вызывая его каждые x миллисекунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...