Я хочу, чтобы вызвать событие один раз, когда прокручивается в поле зрения с помощью jQuery

Я работаю над этим небольшим кодом:

$(window).scroll(function(){
  var scrollTop = $(window).scrollTop(),
      windowHeight = $(window).height(),
      elem = $('#coverage-area-load-trigger').offset().top,
      final = elem - windowHeight,
      distance = final - scrollTop;
  if(distance < 0){
    console.log('Load Now');
  }
});

Как я должен написать это так, чтобы "Загрузить сейчас" был зарегистрирован только один раз?

Я собираюсь заменить журнал консоли "Загрузить сейчас" следующим:

$('#coverage-area').attr('src', 'https://www.google.com/maps/...');

Для запуска iframe "зона покрытия", чтобы загрузить, когда он появляется в поле зрения.

Спасибо за вашу помощь!

2 ответа

Решение

Просто добавьте переменную, которая проверяет, было ли событие инициировано следующим образом:

var coverageAreaTriggered = false;
$(window).scroll(function () {
  if (!coverageAreaTriggered ){
    var scrollTop = $(window).scrollTop(),
      windowHeight = $(window).height(),
      elem = $('#coverage-area-load-trigger').offset().top,
      final = elem - windowHeight,
      distance = final - scrollTop;
    if (distance < 0) {
      console.log('Load Now');
      coverageAreaTriggered = true;
    }
  }
});

Другой вариант заключается в использовании

$(window).on("scroll", function(){
  ...
  if(distance < 0){
    console.log("load now");
    $(window).off("scroll");
  }

});

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

Другие вопросы по тегам