#javascript #html #css
#javascript #HTML #css
Вопрос:
Мне интересно, как создать слайдер с изображениями, чтобы предыдущие и следующие были видны по левому / правому краям, в то время как активный всегда центрирован. Я могу показывать предыдущие или следующие слайды, используя margin-left / margin-right с отрицательными значениями, но когда я прокручиваю следующий, он не будет центрирован из-за этого поля.
Должен ли я применять и удалять отрицательные поля с помощью js script? Как это сделать?
Я показываю свою идею с помощью двух простых скриншотов, которые показывают, что происходит при прокрутке вправо, с 1-го слайда на 2-й:
Ответ №1:
$('.slider').slick({
dots: false,
infinite: false,
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
centerMode: true,
dots: false,
focusOnSelect: true,
});
$('.slider').slick('slickGoTo', 1);
.slider {
max-width: 450px;
}
.slider .slick-slide {
padding: 20px;
outline: none;
}
.slider .slick-slide .inner {
border: 2px solid #000;
min-height: 550px;
padding: 20px;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick-theme.css" integrity="sha512-6lLUdeQ5uheMFbWm3CP271l14RsX1xtx J5x2yeIDkkiBpeVTNhTqijME7GgRKKi6hCqovwCoBTlRBEC20M8Mg==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css" integrity="sha512-yHknP1/AwR yx26cB1y0cjvQUMvEa2PFzt1c9LlS4pRQ5NOTZFWbhBig X9G9eYW/8m0/4OXNx8pxJ6z57x0dw==" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js" integrity="sha512-XtmMtDEcNz2j7ekrtHvOVR4iwwaD6o/FUJe6 Zq HgcCsk3kj4uSQQR8weQ2QVj1o0Pk6PwYLohm206ZzNfubg==" crossorigin="anonymous"></script>
<div class="slider">
<div>
<div class="inner">
SLIDE 1
</div>
</div>
<div>
<div class="inner">
SLIDE 2
</div>
</div>
<div>
<div class="inner">
SLIDE 3
</div>
</div>
</div>
Ответ №2:
Сначала скройте горизонтальное переполнение родительского контейнера.
Тогда, я думаю, вы могли бы сделать что-то вроде этого
<div class="container-item" style="--i: 0"></div>
<div class="container-item" style="--i: 1"></div>
<div class="container-item" style="--i: 2"></div>
.container-item{
--active: 0
transform: translateX(calc((var(--i) - var(--active))* width ))
}
//width refers to the width of the current element which has to be set by you or you may use javascript to find that
и используйте Javascript для изменения значения —active при нажатии на стрелки карусели.
Синтаксис, который я использовал в функции calc, может быть недопустимым, поэтому вам придется его немного изменить.