@lex0rrd

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

Здравствуйте. Нужно реализовать слайдер, который работает таким образом:
Пользователь зашел на страницу и скролит вниз, когда он доходит до слайдера и продолжает скролить, то пролистывается слайдер пока не достигнет последнего айтема, и только после этого идет скролл самой страницы.

Видел, предлагают сделать с помощью библиотеки SCROLLMAGIC, но сам код не нашёл, не представляю, как это сделать

Код слайдера:

HTML

spoiler

<section id="projects" class="projects">
            <div class="container-2">
                
                <div class="itcss">
                    <div class="itcss__wrapper">
                        <div class="itcss__items">

                            <div class="itcss__item">
                                <img src="img/projects.jpg">
                            </div>

                            <div class="itcss__item">
                                <img src="img/14_BathCorner_MG_7028.jpg">
                            </div>

                        </div>
                    </div>
                    <button class="itcss__btn itcss__btn_prev" role="button" data-slide="prev"></button>
                    <button class="itcss__btn itcss__btn_next" role="button" data-slide="next"></button>
                </div>

            </div>
        </section>


CSS

spoiler


.projects {
    margin: auto;
    margin-top: 112px;

    width: 1200px;
    min-height: 667px;

    overflow: hidden;

}

.itcss {
    position: relative;
    max-width: 1200px;
  }
  
  /* стили для wrapper */
  .itcss__wrapper {
    position: relative;
    overflow: hidden;
    background-color: white;
  }
  
  /* стили для элемента, в котором непосредственно расположены элементы (слайды) */
  .itcss__items {
    display: flex;
    transform-style: preserve-3d;
    backface-visibility: hidden;
    transition: transform 0.5s ease;
    will-change: transform;
  }
  
  /* стили для элементов */
  .itcss__item {
    position: relative;
    flex: 0 0 100%;
    max-width: 100%;
    transform-style: preserve-3d;
    backface-visibility: hidden;
    will-change: transform;
  }
  
  /* кнопки Prev и Next */
  .itcss__btn {
    position: absolute;
    top: 50%;
    display: flex;
    justify-content: center;
    align-items: center;
    width: 3rem;
    height: 4rem;
    color: #fff;
    background: rgb(0 0 0 / 10%);
    border: none;
    outline: none;
    transform: translateY(-50%);
    cursor: pointer;
    opacity: 0.5;
    user-select: none;
  }
  
  .itcss__btn_hide {
    display: none;
  }
  
  .itcss__btn:hover,
  .itcss__btn:focus {
    color: #fff;
    text-decoration: none;
    border: none;
    opacity: 0.7;
  }
  
  .itcss__btn_prev {
    left: 0;
  }
  
  .itcss__btn_next {
    right: 0;
  }
  
  .itcss__btn::before {
    content: "";
    display: inline-block;
    width: 2rem;
    height: 2rem;
    background: transparent no-repeat center center;
    background-size: 100% 100%;
  }
  
  .itcss__btn_prev::before {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
  }
  
  .itcss__btn_next::before {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
  }
  
  
  
  /* класс для отключения transition */
  .transition-none {
    transition: none;
  }

.itcss__items {
    counter-reset: slide;
  }

  .itcss__item {
    counter-increment: slide;
  }

  .itcss__item>div::before {
    content: counter(slide);
    position: absolute;
    top: 10px;
    right: 20px;
    color: #fff;
    font-style: italic;
    font-size: 32px;
    font-weight: bold;
  }

.itcss__item img {
    border: 1px solid var(--main-color);
}


JavaScript

https://drive.google.com/file/d/1U4ZKO6aXrTWZwadM3...
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 1
imko
@imko
Senior Scratch Developer
Делаешь здоровенную по высоте обертку для слайдера, делишь ее высоту на количество слайдов, слушаешь скролл и на каждую долю прокрутки обертки, а точнее страницы пока обертка в области просмотра, листаешь по слайду. Самому слайдеру стики позиционирование чтобы он оставался в экране создавая иллюзию непрокручивания страницы
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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