JSFiddle - React, Tailwind, and code Playground

by niuuin

HTML

<div class="container">
        <div id="box">
            <a href="#" class="item">
                <img src="https://dummyimage.com/1600x800/ff4040/ffffff?text=A" alt="">
            </a>
            <a href="#" class="item">
                <img src="https://dummyimage.com/1600x800/3048ff/ffffff?text=B" alt="">
            </a>
            <a href="#" class="item">
                <img src="https://dummyimage.com/1600x800/ff820d/ffffff?text=C" alt="">
            </a>
            <a href="#" class="item">
                <img src="https://dummyimage.com/1600x800/49bd85/ffffff?text=D" alt="">
            </a>
        </div>
    </div>

CSS

img {
    max-width: 100%;
    display: block;
}

.container {
    width: 800px;
    margin: 0 auto;
}

#box {
    position: relative;
    overflow: hidden;
    width: 800px;
    height: 400px;
}

.item {
    position: absolute;
    transition: left 1s;
    /* transition: opacity 1s; */
    display: block;
    width: 100%;
}

JavaScript

; (function () {
    'use strict';

    const parent = document.getElementById('box');
    const slides = document.querySelectorAll('.item');

    let currentIndex = 0;
    let lastIndex = slides.length - 1;


    boot();
    function boot() {
        slideX();
        slideZ();
        setInterval(() => {
            increment();
            slideX();
            slideZ();
        }, 2000);
    }


    function slideX() {
        let prev = getPrev();
        let current = getCurrent();
        let next = getNext();

        prev.style.left = - prev.offsetWidth + 'px';
        current.style.left = 0;
        next.style.left = next.offsetWidth + 'px';
    }

    function slideZ() {
        let prev = getPrev();
        let current = getCurrent();
        let next = getNext();

        prev.style.zIndex = 1;
        current.style.zIndex = 2;
        next.style.zIndex = 0;
    }

    function increment() {
        if (currentIndex < lastIndex)
            return currentIndex++;
        return currentIndex = 0;
    }

    /**
     * 获取 前一个
     *
     * @returns 如果不是第一个,则 -1, 否则回到最后一个
     */
    function getPrev() {
        if (currentIndex > 0)
            return slides[currentIndex - 1];
        return slides[lastIndex];
    }

    /**
     * 获取 当前元素
     *
     * @returns
     */
    function getCurrent() {
        return slides[currentIndex];
    }

    /**
     * 获取后一个
     *
     * @returns 如果不是最后一个,则 +1,否则回到第一个
     */
    function getNext() {
        if (currentIndex < lastIndex)
            return slides[currentIndex + 1];
        return slides[0];
    }




})();