Отображение разных стрелочек в блоке в зависимости от элементов внутри при скролле

Рейтинг: 0Ответов: 1Опубликовано: 02.02.2023

Есть задача. У нас блок, в нем находиться 6 карточек, есть скролл в этом блоке, чтоб мы могли пролистывать карточки. В самом начале у нас есть стрелка вправо, нужно: -чтобы когда долистали до последнего элемента, эта стрелка скрылась и появилась слева(типа, листайте теперь только влево(в обратную сторону)

  • когда долистываем обратно до самого первого элемента, стрелку слева убираем и ставим ее в правую сторону( типа, листайте теперь только вправо) Не могу придумать, как адекватно отследить появление 1-го и последнего элемента для скрытия/появление нужных стрелок И нюанс в том, что пока 1 и последнего элемента не видно, чтоб две стрелки были видны( одна в правую сторону, другая в левую)

Upd. Стрелки несут декоративную функцию, не являются кликабельнимы или кнопками переключения. Просто показывают в какую сторону можно скролить

Пример кода схематически с блоками и стрелками https://jsfiddle.net/7jthb24z/1/

HTML:

<div class='parent'>
  <div class="arrow-left">
    arrow-left
  </div>
  <div class='child first'>
    text  first
  </div>
  <div class='child'>
    text
  </div>
  <div class='child'>
    text
  </div>
  <div class='child'>
    text
  </div>
  <div class='child'>
    text
  </div>
  <div class='child last'>
    text last
  </div>
  <div class="arrow-right">
    arrow-right
  </div>
</div>

CSS:

.parent {
    display: flex;
    overflow: hidden;
    overflow-x: scroll;
    white-space: nowrap;
    width: 853px;
    height: 250px;
    background: red;
    position: relative;
}

.child {
    display: inline-block;
    vertical-align: top;
    width: 674px;
    height: auto;
    background: blue;
    margin-right: 10px;
}

.arrow-left {
    position: fixed;
    display: block;
    background: yellow;
    width: 20px;
    height: 15px;
    left: 10px;
    margin-top: 100px;
}

.arrow-right{
    position: fixed;
    display: block;
    background: yellow;
    width: 20px;
    height: 15px;
    right: 50px;
    margin-top: 100px
}

Ответы

▲ 0Принят

Решение такое. Вы должны повесить некий класс маркер, который будет отслеживать indexOf при каждом нажатии на кнопки-стрелки. Если Вы на первом элементе из списка, то показываете arrow-right если на последнем элементе child.leight arrow-left. При каждом переходе, этот маркер удаляется из списка, а потом назначается на элемент текущего слайда.
Да, ещё желательно вынести элементы навигации слайдера за приделы блока слайдера.

Ну или воспользуйтесь готовыми библиотеками по типу swiperjs или slick slider