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

Добрый день.
При скролле страницы функция находит элемент с указанным классом elem и к элементу с id popup-item добавляет новый класс, который делает видимым попап (добавляет display: block).
Если закрыть попап и продолжить скроллить сайт, попап заново открывается.
Как сделать, чтобы функция выполнялась только один раз и не вызывалась повторно?

Полный код https://jsfiddle.net/devchernov/6zc53dkj/20/

Код скролла
jQuery(document).ready(function($) {
           var target = $('.elem');
                var targetPos = target.offset().top;
                var winHeight = $(window).height();
                var scrollToElem = targetPos - winHeight;
                $(window).scroll(function(){
                  var winScrollTop = $(this).scrollTop();
                  if(winScrollTop > scrollToElem){
                        $('#popup-item').addClass('popup-open')
                    }
                  });
                });
  • Вопрос задан
  • 242 просмотра
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$('#popup-item').not('.done').addClass('popup-open done');
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Удаляйте обработчик после того, как он выполнил нужное действие:

$(window).scroll(function onScroll() {
  const $this = $(this);
  if ($this.scrollTop() > scrollToElem) {
    $('#popup-item').addClass('popup-open');
    $this.off('scroll', onScroll);
  }
});
Ответ написан
Комментировать
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
Добавить флаг
var popup_opened = false
в коде проверять если он false выполнять код и менять его на true, если там true, то соответственно ничего не делать.
Если надо решать вопрос и при повторных загрузках страницы - то писать флаг в localStorage
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы