@s0pran0

Как выполнить функцию один раз при скролле jquery?

Подскажите , мне нужно чтобы при прокрутке страницы воспроизводилось одно событие клика по кнопке, но у меня получается, что она нажимается постоянно при скролле, а надо чтобы один раз.


if ($(this).scrollTop() >= 500) {
$('.departments__button').trigger('click');
} else if ($(this).scrollTop() <= 150) {
$('.departments__button').trigger('click');
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
YavaDev
@YavaDev
Например можно создать переменную, в которой будет хранится булево значение. Эта переменная будет указывать на то, срабатывал ли триггер клика на кнопке.
Это будет выглядеть примерно так
let clickOnButton = true;
$(window).on('scroll', function(){
  if ($(this).scrollTop() >= 500 && clickOnButton){
    $('.departments__button').trigger('click');
    clickOnButton = false;
  }else if ($(this).scrollTop() < 500 && $(this).scrollTop() > 150 ) {
    clickOnButton = true;
  }else if ($(this).scrollTop() <= 150 && clickOnButton) {
    $('.departments__button').trigger('click');
    clickOnButton = false;
  }
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
На чёткий вопрос - чёткий ответ.
Чтобы любую фунцию запускать лишь один раз, нужно создать внешнюю переменную, где хранить количество запусков функции. Это универсальное решение. В вашем случае достаточно булевой переменной.
var was_used = false;
function myFunc() {
  if (was_used) return;
  was_used = true;
  .................
}


Конечно, это костыльное решение, хоть и универсальное. Так что нужно обязательно добавить такую строчку кода:
//TODO: когда наберусь опыта, нужно провести рефакторинг, оптимизацию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽