0

I made an image carousel with JavaScript and I'm running into an issue where when the page first loads, it loads like the below image. If I refresh, it then adjusts properly. I'm hoping someone can give me a tip on how to fix that? I'm including the code below.

Two images, left 2/3 is one and the right 1/3 is the second.

script.js

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

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

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

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

// button listeners
nextBtn.addEventListener('click',()=> {
  if (counter >= carouselImages.length -1) return;
  carouselSlide.style.transition = "transform 0.4s ease-in-out";
  counter++;
  carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
});

prevBtn.addEventListener('click',()=> {
  if (counter <= 0) return;
  carouselSlide.style.transition = "transform 0.4s ease-in-out";
  counter--;
  carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
});

carouselSlide.addEventListener('transitionend', ()=>{
  if (carouselImages[counter].id === 'lastClone'){
    carouselSlide.style.transition = "none";
    counter = carouselImages.length -2;
    carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
  }
  if (carouselImages[counter].id === 'firstClone'){
    carouselSlide.style.transition = "none";
    counter = carouselImages.length - counter;
    carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
  }
});

The HTML for the carousel; the tutorial I was following had me do a firstclone and lastclone to create a more seamless transition.

  <!-- begin carousel -->
  <div class="carousel-container">

    <!-- carousel buttons -->
    <i class="fa-solid fa-arrow-left" id="prevBtn"></i>
    <i class="fa-solid fa-arrow-right" id="nextBtn"></i>

    <!-- begin carousel images -->
    <div class="carousel-slide">
      <img src="img5" id="lastClone">
      <img src="img1">
      <img src="img2">
      <img src="img3">
      <img src="img4">
      <img src="img5">
      <img src="img1">
    <!-- end carousel images -->
    </div>

  <!-- end carousel -->
</div>

The carousel stylesheet

/* carousel style */
.carousel-slide img {
  width: 100vw;
  margin: auto;
}

.carousel-container {
  overflow: hidden;
  margin:0;
  padding:0;
}

.carousel-slide {
  display: flex;
  width: 100%;
  height:100vh;
}

#prevBtn, #nextBtn {
  position: absolute;
  top: 40%;
  z-index:10;
  font-size: 30px;
  color: white;
  opacity: 0.9;
  cursor: pointer;
  padding: 10px;
}

#prevBtn {
  left: 3%;
}

#nextBtn {
  right: 3%;
}

#prevBtn:hover, #nextBtn:hover {
  background-color: rgba(0,0,0,0.4);
}

UPDATE: Added the CSS and HTML to hopefully help with identifying the problem. Thank you so much in advance!

monkeyduo
  • 23
  • 5

0 Answers0