@alex__777

Как сделать слайдер с управляющими элементами?

Здравствуйте, недавно начал практиковаться с javascript. Вчера сделал слайдер с перелистыванием. Сегодня захотел добавить управляющие элементы(точки внизу, чтобы листать слайды). Слайдер состоит из контейнера, где находятся картинки. У него position: relative. При клике на кнопку со стрелкой лево или право изменяется его свойство right на 1000px, в зависимости от кнопки, на которую кликнули. Теперь я не знаю, как сделать перелистывание слайдов нижними кнопками. Мне кажется, что нужно каким-то образом получить видимое изображение, чтобы связать его с управляющей кнопкой, но я не знаю как это сделать. Очень прошу мне помочь. Заранее благодарен.

spoiler
kHrYI6GdTfmsJ5QpahWrxQ.png


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="slider__container">
        <div class="btn btn__prev"></div>
        <div class="img__container">
            <div class="img__wrap">
                <img src="https://i.picsum.photos/id/301/1000/640.jpg" alt="" class="slider__img" data-img="1">
                <img src="https://i.picsum.photos/id/304/1000/640.jpg" alt="" class="slider__img" data-img="2">
                <img src="https://i.picsum.photos/id/305/1000/640.jpg" alt="" class="slider__img" data-img="3">
                <img src="https://i.picsum.photos/id/306/1000/640.jpg" alt="" class="slider__img" data-img="4">
                <img src="https://i.picsum.photos/id/123/1000/640.jpg" alt="" class="slider__img" data-img="5">
            </div>
        </div>
        <div class="btn btn__next"></div>
        <div class="control__container">
            <div class="control control__first control__active"></div>
            <div class="control"></div>
            <div class="control"></div>
            <div class="control"></div>
        </div>
    </div>
    <script src="node_modules/jquery/dist/jquery.js"></script>
    <script src="main.js"></script>
</body>
</html>


.slider__container {
    display: flex;
    width: 70%;
    margin-left: auto;
    margin-right: auto;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
}

.btn {
    width: 50px;
    height: 40px;
    display: inline-flex;
    position: relative;
    background: #b35900;
    justify-content: center;
    align-items: center;
}

.img__container {
    width: auto;
    overflow-x: hidden;
    max-width: 1000px;
    position: relative;
    margin-left: 20px;
    margin-right: 20px;
}

.img__wrap {
    position: relative;
    display: flex;
    flex-wrap: nowrap;
    right: 0;
    width: auto;
}


.slider__img {
    max-width: 1000px;
    
    flex-shrink: 0;
}

.btn__prev::before {
    content: '';
    position: relative;
    display: inline-block;
    background: url(arrow_left_gray.png);
    width: 8px;
    height: 14px;
}

.btn__next::before {
    content: '';
    position: relative;
    display: inline-block;
    background: url(arrow_right_gray.png);
    width: 8px;
    height: 14px;
}

.control__container {
    width: 100%;
    display: flex;
    justify-content: center;
    margin-top: 30px;
}

.control {
    width: 15px;
    height: 15px;
    border-radius: 50%;
    background: rgb(61, 54, 54);
    margin-left: 20px;
}

.control__first {
    margin-left: 0;
}

.control__active {
    background: rgb(70, 187, 233);
}


var prevBtn = $('.btn__prev');
var nextBtn = $('.btn__next');
var image = $('.slider__img');
var wrap = $('.img__wrap');
var isAnimating = false;
var images = document.querySelectorAll('.slider__img').length;
var maxOffset = 1000 * (images - 1);

prevBtn.click(function () {
    var offset = wrap.css('right');
    offset = parseInt(offset, 10);
    if (offset !== 0 && isAnimating === false) {
        isAnimating = true;
        wrap.animate({
            right: offset - 1000,
        }, 1000, function(){
            isAnimating = false;
        });
   }

});

nextBtn.click(function () {
    var offset = wrap.css('right');
    offset = parseInt(offset, 10);
    if(offset !== maxOffset && isAnimating === false) {
        isAnimating = true;
        wrap.animate({
            right: offset + 1000,
        }, 1000, function() {
            isAnimating = false;
        });
    }
});
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

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