2015-05-06 2 views
3

Каков правильный способ активировать прослушиватель прокрутки после события клика?jQuery на прослушивателе прокрутки после события клика

настоящее время я использую:

$('.button').click(function (event) { 
    $(window).on("scroll", someFunction); 
} 

someFunction = function() { 
    //do stuff 
    $(window).off("scroll"); //disable scroll listener 
} 

На событие щелчка включить слушателя прокрутки, который работает SomeFunction. Функция делает вещи и отключает прослушиватель прокрутки по завершении. Слушатель прокрутки снова активируется при нажатии.

Меня беспокоит то, что я не делаю это правильно. Пожалуйста, порекомендуйте!

Примечание: Слушатель прокрутки не может работать бесконечно. Он начинается с щелчка и должен заканчиваться в конце myFunction.

Примечание: Я не пытаюсь определить, когда пользователь прекращает прокрутку ..

+0

ли работа? Выглядит хорошо для меня действительно – scniro

+0

Возможный дубликат [jQuery scroll() обнаруживает, когда пользователь перестает прокручивать] (http://stackoverflow.com/questions/9144560/jquery-scroll-detect-when-user-stops-scrolling) – Jako

+1

@Jako не дублировать. Я пытаюсь выяснить, как «активировать прослушиватель прокрутки после события щелчка», как опубликовано. Не показывать, когда пользователь перестает прокручивать. Абсолютно другой! – CyberJunkie

ответ

6

Вы можете использовать JQuery .one():

$('.button').on('click', function() { 
    $(window).one('scroll', someFunction); 
}); 
-1

Вы можете сделать это следующим образом:

$('.button').click(function (event) { 
    $(window).bind("scroll", someFunction); 
} 

someFunction = function() { 
    //do stuff 
    $(window).unbind("scroll"); // remove scroll listener 
} 
+0

есть разница, использующая 'bind' вместо' on'? – CyberJunkie

+1

yea, 'bind' устарел – scniro

+0

Я не нашел в api устаревшие флаги для bind/unbind. – Tyr

3

Каждый щелчок добавляет дополнительный слушатель события прокрутки. Я бы инкапсулировать связывание с дополнительной переменной:

var isScrollBindingActive = false; 
$('.button').click(function (event) { 
    if (!isScrollBindingActive) { 
     isScrollBindingActive = true; 
     $(window).on("scroll", someFunction); 
    } 
} 

someFunction = function() { 
    //do stuff 
    $(window).off("scroll"); //disable scroll listener 
    isScrollBindingActive = false; // allow binding again if wished 
} 
+0

Спасибо! Вот почему у меня были проблемы! Я бы голосовал как правильный ответ, но решение Сергея '$ (window) .one ('scroll', someFunction);' похоже, работает также с меньшим количеством кода. – CyberJunkie

Смежные вопросы