≑ Menu

πŸš€ Deep Dive: Building an Infinite Image Slider from Scratch Using Javascript!

Building a robust image carousel doesn’t require heavy libraries.

This guide walks you through the same compact, single-file HTML, CSS, and JavaScript solution, but this time, we’ll break down every critical step to show exactly how it works.


1. πŸ“‚ HTML Structure: The Container and The Strip

 

The HTML sets up the visual stage. The core idea relies on nesting:

  • <div class="slider-container">: This is the viewport. We set its size and use overflow: hidden; to clip anything that extends beyond its boundary.

  • <div class="slider">: This is the image strip. It’s wider than the container and holds all the images side-by-side. This is the element we will move.

HTML:

<div class="slider-container">
    <div class="slider">
        <img src="image1.jpg" alt="Image 1">
        <img src="image2.jpg" alt="Image 2">
        <img src="image3.jpg" alt="Image 3">
    </div>

    </div>

2. 🎨 CSS Logic: Side-by-Side Movement

The CSS is essential for setting up the motion and styling the navigation.

The Core Movement Setup:

 

CSS Selector Key Property Explanation
.slider display: flex; Lays all the image children out in a single horizontal line.
transition: transform 0.5s; This ensures the movement isn’t instant (snapping) but is a smooth, half-second slide.
.slider img width: 100%; Crucial! Each image is forced to take up exactly the full width of its parent container (the .slider-container viewport).
flex-shrink: 0; Prevents the images from resizing to fit the screen when flex items are involved.
.slider-container overflow: hidden; Hides the images that are positioned off-screen, creating the “frame” effect.

3. 🧠 JavaScript Step-by-Step Explanation

The JavaScript handles event listening, dynamic dot creation, and the crucial math for movement and looping.

Step 3A: Initial Setup & Dynamic Dots

The code first selects all the necessary DOM elements and calculates the total number of slides. Then, it dynamically generates the navigation dots.

// Get all elements
const slider = document.querySelector('.slider');
const images = document.querySelectorAll('.slider img');
let currentSlide = 0; // Starts at the first image (index 0)
const totalSlides = images.length; // e.g., 3

// Loop to create one dot for every image
for (let i = 0; i < totalSlides; i++) {
    // Creates a new <span class="dot"> and adds it to the dots-container
    // ...
}
const dots = document.querySelectorAll('.dot');

Step 3B: The Core updateSlider() Function

This function is called after every user interaction (click on next, previous, or a dot). It contains the logic that visually moves the image strip.

function updateSlider() {
    // 1. Calculate Offset
    const offset = -currentSlide * 100;

    // 2. Apply Movement
    // If currentSlide is 1, offset is -100. translateX(-100%) shifts the strip left 
    // by one full image width, bringing the second image into view.
    slider.style.transform = `translateX(${offset}%)`;

    // 3. Update Dots
    // Removes 'active' class from all dots and adds it only to the current dot.
    dots.forEach((dot, index) => {
        dot.classList.remove('active');
        if (index === currentSlide) {
            dot.classList.add('active');
        }
    });
}

Step 3C: Creating the Infinite Loop

The event listeners for the navigation buttons use the powerful Modulo Operator (%) to create an endless cycle.

▢️ Next Button Logic:

nextBtn.addEventListener('click', () => {
    currentSlide = (currentSlide + 1) % totalSlides;
    updateSlider();
});
  • Example (3 slides): If currentSlide is 2 (the last slide), (2 + 1) is 3.

  • The calculation becomes: 3 % 3 = 0.

  • The slider instantly cycles back to index 0 (the first image).

◀️ Previous Button Logic (The “Safe Loop”):

 

prevBtn.addEventListener('click', () => {
    currentSlide = (currentSlide - 1 + totalSlides) % totalSlides;
    updateSlider();
});
  • Why the extra + totalSlides? If currentSlide is 0, (0 - 1) is -1. In JavaScript, -1 % 3 equals -1, which is an invalid index.

  • The Fix: Adding + totalSlides ensures the number is always positive.

    • Example (3 slides): If currentSlide is 0, the calculation is (0 – 1 + 3) % 3.

    • This simplifies to 2 % 3 = 2.

    • The slider correctly loops from index 0 back to index 2 (the last slide).

This step-by-step approach ensures your slider is not only functional but also perfectly loops in both directions!

Useful links below:

Let me & my team build you a money making website/blog for your businessΒ https://bit.ly/tnrwebsite_service

Get Bluehost hosting for as little as $1.99/month (save 75%)…https://bit.ly/3C1fZd2

Best email marketing automation solution on the market! http://www.aweber.com/?373860

Build high converting sales funnels with a few simple clicks of your mouse! https://bit.ly/484YV29

Join my Patreon for one-on-one coaching and help with your coding…https://www.patreon.com/c/TyronneRatcliff

Buy me a coffeeΒ β˜•οΈhttps://buymeacoffee.com/tyronneratcliff

{ 0 comments… add one }

Leave a Comment