JQuery - функция прокрутки продолжает срабатывать: только один раз, пожалуйста

У меня есть следующая функция jQuery, которая запускаетaTestEvent() когда пользователь прокручивает горизонтально за 500 пикселей:

jQuery(document).scroll(function(){
    if(jQuery(this).scrollLeft() >= 500){
           aTestEvent();
 }});

Вот'С вопросом: я хочу толькоaTestEvent() быть вызванным один раз! Однако каждый раз, когда пользователь прокручивает назад к началу страницы, а затем снова проходит 500 пикселей,aTestEvent() снова срабатывает.

Как мы можем настроить приведенный выше код так, чтобы триггерпроисходит только в первый раз пользователь прокручивает последние 500 пикселей?

Ответы на вопрос(1)

Решение Вопроса

Ты можешь использоватьon а такжеoff методы:

$(document).on('scroll', function() {
    if( $(this).scrollLeft() >= 500 ) {
        $(document).off('scroll');
        aTestEvent();
    }
});

http://jsfiddle.net/3kacd/

Обратите внимание: этот фрагмент кода может "выкл» все события прокрутки, доступные на определенной странице, но чтобы прокрутить только предназначенный обработчик прокрутки, не мешая другим обработчикам прокрутки, мы можем использовать пространство имен. Пространства имен похожи на классы CSS тем, что они не иерархичны; только одно имя должно соответствовать.

$(document).on('name1.scroll', function() {
    if( $(this).scrollLeft() >= 500 ) {
        $(document).off('name1.scroll');
        aTestEvent();
    }
});

http://jsfiddle.net/shekhardtu/3kacd/57/

 Don McCurdy28 мая 2013 г., 04:59
Другой удобный трюк - менее известный метод .one ().api.jquery.com/one Очень полезно время от времени, но это неТехнически это работает из-за оператора if () - он срабатывает только один раз, даже если условие if было ложным.
 raam8609 июн. 2013 г., 02:03
конечно. но почему бы и нет: console.log ('aTestEvent»); $ (Документ) .off (»прокрутки»); Таким образом, он выключается после запуска события. Это настоящая интрига
 undefined28 мая 2013 г., 04:09
@tehSUPERADMIN Добро пожаловать.
 tehSUPERADMIN28 мая 2013 г., 04:02
Это делает трюк! Большое спасибо. Приму, как только смогу.
 adamj07 сент. 2016 г., 05:42
name1.scroll не работает
 undefined09 июн. 2013 г., 01:51
@ raam86off отменяет привязку обработчика, зарегистрированногоon метод, поскольку OP хочет прекратить слушать событие, которое я использовал.off
 undefined09 июн. 2013 г., 02:21
@ raam86 Ну, я нетoff вызывается, когда условие выполняется в пределахscroll обработчик, прошу перечитать вопрос, jQueryoff документацию и проверьте скрипку в моем ответе.
 raam8609 июн. 2013 г., 01:44
@ Не определено, почему ты положил .off перед событием?
 raam8609 июн. 2013 г., 02:15
Вы выключили событие до его запуска. Вы можете написать строку для вызовов одноразовое событие перед $ (document) .off ('прокрутки») Почему вы перестаете слушать, прежде чем событие будет запущено?
 undefined09 июн. 2013 г., 02:06
@ raam86 Извините, я нене понимаю тебя

Ваш ответ на вопрос