Постоянно запускать функцию

Я использую отличный плагин inView, чтобы проверить, видим ли элемент в области просмотра, используя setInterval, но функция запускается только один раз и только тогда, когда элемент видим, а не иначе (должен запускаться оператор else).

var checkViewport = setInterval(function() {
    $('#colorbox').on('inview', function(event, visible) {
      if (visible) {
        console.log('YES');
      } else {
        console.log('NO');
      }
    });
}, 5000);

2 ответа

Решение

Свяжите событие один раз и проверьте отдельную переменную. Попробуй это:

var isVisible = false;

$('#colorbox').on('inview', function(event, visible) {
    isVisible = visible;
});

var checkViewport = setInterval(function() {
    if (isVisible) {
        console.log('YES');
    } else {
        console.log('NO');
    }
}, 5000);

Вы можете структурировать это по-другому, чтобы убедиться, isVisible не является глобальной переменной и может быть доступно setInterval все еще так же.

Код в вашем примере связывает событие только тогда, когда элемент находится в области просмотра. Вы на самом деле ничего не выполняете, просто постоянно связываете событие.

Я бы предложил вместо этого проверить элемент colorbox каждый интервал, затем вход в консоль, будь то colorbox виден

Источник (HTML DOM и JavaScript):

var checkViewport = setInterval(function() {
    myColorBox = document.getElementById("colorbox");
      if (myColorBox.style.visibility == "visible") {
        console.log('YES');
      } else {
        console.log('NO');
      }
    });
}, 5000);
Другие вопросы по тегам