Как привязать смену изображений к скроллу на странице?

Доброго времени суток.
Как можно реализовать смену изображений для эффекта видео?
И что бы работала в обе стороны. Т.е при скролле вниз менялись в одном направлении, а при скролле вверх в обратном.
И главная задача что бы эта анимация работала, только тогда, когда блок с изображениями находится в поле видимости.
Т.е весь цикл анимации должен проходить в этом промежутке, когда блок на экране.

Делал так: позиционировал все изображения в блоке абсолютно и при скролле добавлял по очереди каждому следующему изображению z-index + 1.
var step=100,
     img = 1,
     scrollPos = 0;

    $(window).scroll(function(){
        var index = $(this).scrollTop();

        if (index > scrollPos){ //скролл вниз

            if (index > step) {

                if(img < 11){
                    step+=100;
                    $('.animation-container > img.an-'+img).css({'z-index' : img});
                    img+=1;
                }

            }

        } else {

            //Скролл вверх

        }
        scrollPos = index;
    });


Но все работает криво и никуда не годится
  • Вопрос задан
  • 465 просмотров
Пригласить эксперта
Ответы на вопрос 2
@wladislaw353
Не занимайтесь ерундой с видео!
Все делается буквально в пару строк кода и работает стабильнее

<img data-source="/img/frames/" data-frames="50" data-height="1300" src="" alt="">

Кол-во кадров: 50
Картинки называем 1.jpg, 2.jpg и тд
Высота 1300px, при скролле которой равномерно меняются кадры.

const $img            = document.querySelector('img')
const imgSource       = $img.getAttribute('data-source')
const framesCount     = $img.getAttribute('data-frames')
const scrollingHeight = $img.getAttribute('data-height')

changeFrame(window.scrollY)

document.addEventListener('scroll', () => {
    changeFrame(window.scrollY)
})

function changeFrame(scrollY) {
    let frame = parseInt(scrollY / (scrollingHeight / framesCount) + 1)
    frame = frame > framesCount ? framesCount : frame
    $img.setAttribute('src', imgSource + frame + '.jpg')
}
Ответ написан
А зачем юзать кучу картинок, когда их можно слепить в видео и работать уже с ним?
У меня был похожий проект, я долго долбился в картинки, но лучшим решением оказалось именно использование видео

UPD: даже два проекта, видео я использовал во втором, а в первом вообще секвенции придумали использовать - сейчас бы сделал с помощью видео)
Ответ написан
Ваш ответ на вопрос

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

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