Прокрутка локомотива — переключение с горизонтального на вертикальное и обратно

#javascript #scroll #horizontal-scrolling #smooth-scrolling #locomotive-scroll

Вопрос:

Я использую Локомотив-Скролл (https://locomotivemtl.github.io/locomotive-scroll/) для плавной и горизонтальной прокрутки это легко и хорошо работает. Тем не менее, я хотел бы также интегрировать раздел вертикальной прокрутки.

Визуальное Объяснение

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

  • Я не понимаю, почему мое решение в определенной степени работает, и я не могу найти ни одного учебника по локомотивной прокрутке, который шел бы дальше добавления свойства прокрутки данных
  • Я не нашел способа изменить направление вертикальной прокрутки вниз на вверх
  • Если я изменю размер окна, прокрутка локомотива затормозится и может быть восстановлена только перезагрузкой

Мое текущее решение (я бы считал себя новичком):

 const scroller = new LocomotiveScroll({
    el: document.querySelector('#scrollable'),
    smooth: true,
    direction: 'horizontal'
}); 
 * {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    font-family: 'Helvetica Neue', sans-serif;
    font-size: 2vh;
}

.section {
    height: 100vh;

}

#section-one {
    width: 100vw;
}

#section-two {
    width: 400vh;
    background-color: blanchedalmond;
}

#section-three {
    width: 100vw;
}

.heading {
    font-size: 5rem;
    font-weight: 500;
    text-transform: uppercase;
}

.home__statement {
    width: 100vw;
    position: relative;
}

.heading.one {
    position: absolute;
    left: 10vw;
    top: 25vh;
}

.heading.two {
    position: absolute;
    left: 10vw;
    top: 35vh;
}

.heading.three {
    position: absolute;
    left: 10vw;
    top: 45vh;
}

#sticky-container{
    width: 100vw;
    height: 100vh;
    background-color: cadetblue;
}

.vertical-canvas {
    position: absolute;
    top: -300vh;
    height: 400vh;
    width: 100vw;
    background-image: linear-gradient(red, yellow);
}

.example-1 {
    height: 50%;
    width: 100vw;
    background-color:rgba(175, 18, 18, 0.3);;
}

.elem {
    width: 100px;
    height: 100px;
    background-color: cornsilk;
}

.example-2 {
    height: 25%;
    width: 100vw;
    background-color: rgba(46, 165, 46, 0.3);
}

.example-3 {
    height: 25%;
    width: 100vw;
    background-color: rgba(75, 92, 168, 0.3);
} 
     <div id="scrollable" data-scroll-container>

        <section class="section" id="section-one" data-scroll-section>

            <div class="home__statement">
                <span class="heading one" id="statement__line-one">Some text blabla</span>
            <div>

        </section>
        
        <section class="section" id="section-two" data-scroll-section>

            <div id="sticky-container"
                data-scroll
                data-scroll-sticky
                data-scroll-target="#section-two"
                data-scroll-speed="-1">
                    <div class="vertical-canvas"
                        data-scroll
                        data-scroll-sticky
                        data-scroll-target="#section-two"
                        data-scroll-direction="vertical">
                        <div class="example-1" id="ex1">
                            <div class="elem"></div>
                        </div>
                        <div class="example-2"></div>
                        <div class="example-3"></div>
                    </div>
            <div>

        </section>

        <section class="section" id="section-three" data-scroll-section>

            <div class="home__statement">
                <span class="heading one" id="statement__line-one">Some text blabla</span>
            <div>

        </section> 

Ответ №1:

Вы не можете инициализировать как горизонтальную, так и вертикальную прокрутку в одном и том же [контейнере для прокрутки данных]

Для того, чего вы хотите достичь, вы можете использовать gsap scrollTrigger, но вы должны реализовать scrollTrigger с помощью locmotive

Чем вы сможете добиться любого эффекта, который захотите