Ползунок карусели не скользит должным образом - PullRequest
0 голосов
/ 17 июня 2020

Сейчас я пытаюсь создать карусель в html и js. Мой код кажется правильным, но по какой-то причине картинки не скользят. Я что-то упускаю? Что я мог добавить? Вот код:

HTML:

<body>
<div class="carousel-container">
    <div class="carousel-slide">
        <img src="./img/artpic3.jpg" id="lastClone" alt="">
        <img src="./img/artpic1.jpg" alt="">
        <img src="./img/artpic2.jpg" alt="">
        <img src="./img/artpic3.jpg" alt="">
        <img src="./img/artpic1.jpg" id="firstClone" alt="">
    </div>
</div>


<button id="prevBtn">Prev</button>
<button id="nextBtn">Next</button>

<script src="app.js"></script>

JavaScript:

const carouselSlide = document.querySelector('.carousel-slide');
const carouselImages = document.querySelectorAll('.carousel-slide img');


const prevBtn = document.querySelector('#prevBtn');
const nextBtn = document.querySelector('#nextBtn');


let counter = 1;
const size = carouselImages[0].clientWidth;

carouselSlide.style.transform = 'tranlateX(' + (-size * counter) + 'px)';


nextBtn.addEventListener('click', () => {
carouselSlide.style.transition = "transform 0.6s ease-in-out";
counter++;
carouselSlide.style.transform = 'tranlateX(' + (-size * counter) + 'px)';
});
prevBtn.addEventListener('click', () => {
carouselSlide.style.transition = "transform 0.4s ease-in-out";
counter--;
carouselSlide.style.transform = 'tranlateX(' + (-size * counter) + 'px)';
});

CSS:

.carousel-container { 
    width: 70%; margin: auto; border: 5px solid white; overflow: hidden;
}
.carousel-slide {
    display: flex; width: 100%; height: 500px;
}

1 Ответ

1 голос
/ 17 июня 2020

С вашей каруселью две проблемы.

  1. Вы написали translateX как tranlateX.

  2. carouselImages[0].clientWidth изначально 0 и, поскольку вы присвоили его постоянной переменной, оно остается 0 и, таким образом, продолжает умножать counter на 0 каждый раз, когда нажимаются кнопки «предыдущий / следующий».

Просто измените (-size * counter) на (-carouselImages[0].clientWidth * counter), и ваша карусель должна работать нормально.


Проверьте и запустите следующий фрагмент кода для практического примера карусели с указанные выше изменения:

const carouselSlide = document.querySelector('.carousel-slide');
const carouselImages = document.querySelectorAll('.carousel-slide img');


const prevBtn = document.querySelector('#prevBtn');
const nextBtn = document.querySelector('#nextBtn');


let counter = 1;

carouselSlide.style.transform = 'translateX(' + (-carouselImages[0].clientWidth * counter) + 'px)';


nextBtn.addEventListener('click', () => {
carouselSlide.style.transition = "transform 0.6s ease-in-out";
counter++;
carouselSlide.style.transform = 'translateX(' + (-carouselImages[0].clientWidth * counter) + 'px)';
});
prevBtn.addEventListener('click', () => {
carouselSlide.style.transition = "transform 0.4s ease-in-out";
counter--;
carouselSlide.style.transform = 'translateX(' + (-carouselImages[0].clientWidth * counter) + 'px)';
});
.carousel-container { width: 70%; margin: auto; border: 5px solid white; overflow: hidden; }
.carousel-slide { display: flex; width: 100%; height: 500px; }
<div class="carousel-container">
    <div class="carousel-slide">
        <img src="https://picsum.photos/1420/550?random=1" id="lastClone" alt="">
        <img src="https://picsum.photos/1420/550?random=2" alt="">
        <img src="https://picsum.photos/1420/550?random=3" alt="">
        <img src="https://picsum.photos/1420/550?random=4" alt="">
        <img src="https://picsum.photos/1420/550?random=5" alt="">
        <img src="https://picsum.photos/1420/550?random=6" alt="">
        <img src="https://picsum.photos/1420/550?random=7" alt="">
        <img src="https://picsum.photos/1420/550?random=1" alt="">
    </div>
</div>


<button id="prevBtn">Prev</button>
<button id="nextBtn">Next</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...