Показать сообщение отдельно
  #14 (permalink)  
Старый 01.03.2021, 07:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от ethereal
threshold: [0.1, 0.8]
а почитать документацию? функция сработает два раза, когда блок будет виден на 10% и 80% --- 10 почти скрылся -- 80 почти открылся

el.intersectionRatio > .4; --- любое число больше .1 и меньше .8 --- блок виден если true.

нужен полноценный макет с css.
попробуйте так ...
document.addEventListener('DOMContentLoaded', function() {
    const lazyAnimate = divs => {
        divs.forEach(el => {
            let isInView = el.intersectionRatio > .4;
            let div = el.target;
            if (div.classList.contains('site--image---video')) div.classList.toggle('show', isInView);
            let video = div.querySelector('.site--video');
                if (isInView) {
                    video.play();
                    //$(video).bgVideo();?? 
                } else {
                    video.pause();
                    video.currentTime = 0;
                }
        });
    }
    let observer = new IntersectionObserver(lazyAnimate, {
        rootMargin: "0px",
        threshold: [.1, .9] //настроить видимость
    });
    let container = document.querySelectorAll('.site--image---video');
    container.forEach(div => observer.observe(div))
});

Последний раз редактировалось рони, 01.03.2021 в 08:02.
Ответить с цитированием