Call Now : +971523144541

Single Blog

  • Home
  • Create a autoplay banner carousel in LWC

Create a autoplay banner carousel in LWC

Admin July 15, 2024 0 Comments

Welcome, in this post we will learn you about how to create an autoplay banner carousel in LWC. The banner will be autoplay, have dots navigations and prev/next button features. So, basically, it included all the features which a carousel should have. Our code will be consist of three files, HTML, CSS and JavaScript. Let’s build this amazing slider. 

Table of Contents

First of all create a component named “homeSlider”. Now in this component there should be three files HTML, CSS, and JavaScript.
Now place the below code in respective file.  

HTML Code

Copy this HTML code and past it into your “homeSlider.html”  file.  

				
					<template>
    <div class="banner-slider">

        <!-- Banner Slider area -->

        <div class="banner-slider_inner" style={carouselInnerStyle}>
            <template for:each={slides} for:item="slide">
                <div key={slide.id} class={slide.itemClass}>
                    <img src={slide.image} alt={slide.alt}>
                    <div class="slide-caption slds-grid">
                        <h3 class="slds-m-right_medium">
                            {slide.headings}
                        </h3>
                        <p class="image-credit">{slide.paragraph}</p>
                    </div>
                </div>
            </template>
        </div>

        <!-- Slider Controle Dots -->

        <div class="slider-controls">
            <div class="slider-dots">
                <template for:each={slides} for:item="slide">
                    <div key={slide.id} class={slide.dotClass} data-index={slide.id} onclick={handleDotClick}></div>
                </template>
            </div>
        </div>
    </div>
</template>
				
			

First of all create a component named “homeSlider”. Now in this component there should be three files HTML, CSS, and JavaScript.
Now place the below code in respective file.  

JavaScript Code

Copy this JavaScript code and past it into your “homeSlider.js”  file.  

				
					import { LightningElement, track } from 'lwc';

export default class HomeSlider extends LightningElement {
    @track slides = [
        {
            id: 0,
            image: 'https://res.cloudinary.com/epiphanystudios/image/upload/v1474325161/Billboard_-_AnalyticsBanner_s0vsiv.jpg',
            alt: 'Image 1',
            headings: 'Heading 1',
            paragraph: 'Paragraph 1',
            itemClass: 'slider-item active',
            dotClass: 'slider-dot active'
        },
        {
            id: 1,
            image: 'https://res.cloudinary.com/epiphanystudios/image/upload/v1474389520/Billboard_-_HipsterBanner_rzyv5r.jpg',
            alt: 'Image 2',
            headings: 'Heading 2',
            paragraph: 'Paragraph 2',
            itemClass: 'slider-item',
            dotClass: 'slider-dot'
        },
        {
            id: 2,
            image: 'https://res.cloudinary.com/epiphanystudios/image/upload/v1474389522/Billboard_-_ProductsBanner_kfucs3.jpg',
            alt: 'Image 3',
            headings: 'Heading 3',
            paragraph: 'Paragraph 3',
            itemClass: 'slider-item',
            dotClass: 'slider-dot'
        }
    ];

    @track currentSlide = 0;

    get carouselInnerStyle() {
        return `transform: translateX(${this.carouselOffset}%);`;
    }

    get carouselOffset() {
        return -this.currentSlide * 100;
    }

    handleDotClick(event) {
        const index = parseInt(event.target.dataset.index, 10);
        this.showSlide(index);
    }

    showSlide(index) {
        const totalSlides = this.slides.length;

        if (index >= totalSlides) {
            this.currentSlide = 0;
        } else if (index < 0) {
            this.currentSlide = totalSlides - 1;
        } else {
            this.currentSlide = index;
        }

        this.updateSlideClasses();
    }

    updateSlideClasses() {
        this.slides = this.slides.map((slide, index) => {
            return {
                ...slide,
                itemClass: index === this.currentSlide ? 'slider-item active' : 'slider-item',
                dotClass: index === this.currentSlide ? 'slider-dot active' : 'slider-dot'
            };
        });
    }

    connectedCallback() {
        this.startAutoSlide();
    }

    startAutoSlide() {
        this.intervalId = setInterval(() => {
            this.currentSlide = (this.currentSlide + 1) % this.slides.length;
            this.updateSlideClasses();
        }, 300000); 
    }


}

				
			

First of all create a component named “homeSlider”. Now in this component there should be three files HTML, CSS, and JavaScript.
Now place the below code in respective file.  

CSS Code

Copy this CSS code and past it into your “homeSlider.css”  file.  

				
					.banner-slider {
    position: relative;
    width: 100%;
    overflow: hidden;
}

.banner-slider .banner-slider_inner {
    display: flex;
    transition: transform 0.5s ease-in-out;
}

.banner-slider .slider-item {
    position: relative;
    min-width: 100%;
    box-sizing: border-box;
}

.banner-slider .slider-item img {
    width: 100%;
    display: block;
}

.banner-slider .slide-caption {
    padding: 0 4rem;
    max-width: 100%;
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
    padding: 0.75rem;
    color: #fff;
    font-weight: normal;
    font-size: 1.1rem;
}


.banner-slider .slide-caption_inner .image-credit {
    text-transform: uppercase;
}

.banner-slider .slider-dots {
    display: flex;
    justify-content: center;
    position: absolute;
    bottom: 10px;
    width: 100%;
}

.banner-slider .slider-dot {
    height: 13px;
    width: 13px;
    margin: 0 5px;
    background-color: rgba(255, 255, 255, 0.5);
    border-radius: 50%;
    cursor: pointer;
}

.banner-slider .slider-dot.active {
    background-color: white;
}


@media (max-width:1024px) {
    .banner-slider .slide-caption {
        padding: 0 1rem;
    }
}

@media(max-width:767px) {
    .banner-slider .slide-caption {
        display: block;
        padding: 0;
    }

    .banner-slider .slide-caption_inner {
        padding: 0 0.75rem;
        font-size: 0.9rem;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .banner-slider .slide-caption_inner .image-credit {
        font-size: 0.9rem;
    }

    .banner-slider .slider-controls_inner {
        bottom: 2rem;
    }

    .banner-slider .slider-dot {
        height: 10px;
        width: 10px;
    }

}

@media (max-width:600px) {
    .banner-slider .slider-item img {
        min-height: 200px;
        object-fit: cover;
    }
}
				
			

First of all create a component named “homeSlider”. Now in this component there should be three files HTML, CSS, and JavaScript.
Now place the below code in respective file.  

homeSlider.js-meta.xml file

Please make sure that your “homeSlider.js-meta.xml” is exposed and have availability access to the respective enviornement where you are using the your compoennt. for reference you can check below code :

				
					<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
	<apiVersion>57.0</apiVersion>
	<isExposed>true</isExposed>
	<targets>
		<target>lightning__RecordPage</target>
		<target>lightning__AppPage</target>
		<target>lightning__HomePage</target>
		<target>lightning__Tab</target>
		<target>lightning__Inbox</target>
		<target>lightning__UtilityBar</target>
		<target>lightning__FlowScreen</target>
		<target>lightningSnapin__ChatMessage</target>
		<target>lightningSnapin__Minimized</target>
		<target>lightningSnapin__PreChat</target>
		<target>lightningSnapin__ChatHeader</target>
		<target>lightning__RecordAction</target>
		<target>lightningCommunity__Page</target>
		<target>lightningCommunity__Default</target>
		<target>lightningCommunity__Page_Layout</target>
		<target>lightningCommunity__Theme_Layout</target>
		<target>lightningStatic__Email</target>
		<target>analytics__Dashboard</target>
	</targets>
</LightningComponentBundle>
				
			

Conclusion

That’s it now your banner slider will work like a magic. please check and leave a feedback in comment section. Thanks. Have fun. 

Leave Comment