首页 前端技术 简单轮播插件

简单轮播插件

1、HTML结构

php
<div class="slider-container">
            <ul class="rslides" id="slider">
                <li class="active">
                    <div class="image-item">
                        <img src="http://localhost/wordpress/wp-content/uploads/2026/03/179682.jpg" alt="图文列表">
                    </div>
                    <p class="slider-caption">图文列表</p>
                </li>
                <li>
                    <div class="image-item">
                        <img src="http://localhost/wordpress/wp-content/uploads/2026/03/179682.jpg" alt="文章类型测试">
                    </div>
                    <p class="slider-caption">文章类型测试</p>
                </li>
            </ul>
            <button class="slider-btn prev-btn"><</button>
            <button class="slider-btn next-btn">></button>
            <div class="slider-indicators"></div>
        </div>

2、JS代码

plain
<script>
    const slider = document.getElementById('slider');
    const slides = slider.querySelectorAll('li');
    const prevBtn = document.querySelector('.prev-btn');
    const nextBtn = document.querySelector('.next-btn');
    const indicatorsContainer = document.querySelector('.slider-indicators');
    let currentIndex = 0;
    let autoplayTimer;

    function createIndicators() {
        slides.forEach((_, index) => {
            const indicator = document.createElement('div');
            indicator.className = `indicator ${index === 0 ? 'active' : ''}`;
            indicator.addEventListener('click', () => goToSlide(index));
            indicatorsContainer.appendChild(indicator);
        });
    }

    function goToSlide(index) {
        slides.forEach(slide => slide.classList.remove('active'));
        document.querySelectorAll('.indicator').forEach(ind => ind.classList.remove('active'));
        
        currentIndex = index < 0 ? slides.length - 1 : index >= slides.length ? 0 : index;
        
        slides[currentIndex].classList.add('active');
        document.querySelectorAll('.indicator')[currentIndex].classList.add('active');
        
        resetAutoplay();
    }

    function prevSlide() { goToSlide(currentIndex - 1); }
    function nextSlide() { goToSlide(currentIndex + 1); }

    function startAutoplay() {
        autoplayTimer = setInterval(nextSlide, 3000);
    }

    function resetAutoplay() {
        clearInterval(autoplayTimer);
        startAutoplay();
    }

    function initSlider() {
        createIndicators();
        startAutoplay();
        
        prevBtn.addEventListener('click', prevSlide);
        nextBtn.addEventListener('click', nextSlide);
        
        slider.addEventListener('mouseenter', () => clearInterval(autoplayTimer));
        slider.addEventListener('mouseleave', startAutoplay);
    }

    window.addEventListener('DOMContentLoaded', initSlider);
</script>

3、简单样式

css
* {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .site-slide {
            width: 1200px;
            height: 320px;
            margin: 30px auto;
            display: flex;
            gap: 20px;
            border: 1px solid #ccc;
        }

        .slideleft {
            flex: 7;
            height: 100%;
            display: flex;
            gap: 15px;
            border: 1px solid #ccc;
        }

        .slider-container {
            flex: 1;
            height: 100%;
            position: relative;
            overflow: hidden;
            border-radius: 4px;
        }

        .rslides {
            position: relative;
            list-style: none;
            width: 100%;
            height: 100%;
            overflow: hidden;
        }

        .rslides li {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            opacity: 0;
            transition: opacity 0.8s ease;
            z-index: 0;
        }

        .rslides li.active {
            opacity: 1;
            z-index: 1;
        }

        .image-item {
            width: 100%;
            height: 100%;
        }

        .image-item img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }

        /* 本次修改:将文字对齐方式改为左对齐,并添加左侧内边距增强视觉效果 */
        .slider-caption {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            padding: 8px 15px; /* 增加左侧内边距,避免文字贴边 */
            margin: 0;
            background: rgba(0, 0, 0, 0.6);
            color: white;
            font-size: 14px;
            text-align: left; /* 核心修改:左对齐 */
        }

        .slider-btn {
            position: absolute;
            top: 50%;
            transform: translateY(-50%);
            width: 36px;
            height: 36px;
            background: rgba(0, 0, 0, 0.5);
            color: white;
            border: none;
            border-radius: 50%;
            font-size: 18px;
            cursor: pointer;
            z-index: 2;
            opacity: 0;
            visibility: hidden;
            transition: all 0.4s ease;
        }

        .slider-container:hover .slider-btn {
            opacity: 1;
            visibility: visible;
        }

        .slider-btn:hover {
            background: rgba(0, 0, 0, 0.8);
        }

        .prev-btn {
            left: 10px;
            transform: translateY(-50%) translateX(-10px);
        }

        .slider-container:hover .prev-btn {
            transform: translateY(-50%) translateX(0);
        }

        .next-btn {
            right: 10px;
            transform: translateY(-50%) translateX(10px);
        }

        .slider-container:hover .next-btn {
            transform: translateY(-50%) translateX(0);
        }

        .slider-indicators {
            position: absolute;
            bottom: 10px;
            right: 10px;
            transform: translateX(10px);
            display: flex;
            gap: 6px;
            z-index: 2;
            opacity: 0;
            visibility: hidden;
            transition: all 0.3s ease;
        }

        .slider-container:hover .slider-indicators {
            opacity: 1;
            visibility: visible;
            transform: translateX(0);
        }

        .indicator {
            width: 6px;
            height: 6px;
            border-radius: 50%;
            background: rgba(255, 255, 255, 0.5);
            cursor: pointer;
            transition: background 0.3s ease;
        }

        .indicator.active {
            background: white;
        }

        #slide-right {
            width: 160px;
            height: 100%;
            display: flex;
            flex-direction: column;
            gap: 20px;
        }

        .item-sr {
            width: 160px;
            height: 150px;
            overflow: hidden;
            position: relative;
            border-radius: 4px;
            background: #000;
        }

        .item-sr img {
            width: 160px;
            height: 150px;
            object-fit: cover;
            transition: all 0.3s ease;
        }

        .item-sr:hover img {
            transform: scale(1.05);
            filter: brightness(1.1);
        }

        .item-sr a {
            position: absolute;
            bottom: 0;
            left: 0;
            width: 100%;
            text-decoration: none;
            color: #fff;
        }

        /* 小图文字定位:浮在图片下方 */
        .item-sr-caption {
            position: absolute;
            bottom: 0;
            left: 0;
            width: 100%;
            padding: 8px 0;
            font-size: 14px;
            text-align: center;
            background: rgba(0, 0, 0, 0.6);
            transition: background 0.3s ease;
        }

        .item-sr:hover .item-sr-caption {
            background: rgba(0, 0, 0, 0.8);
        }

        .slideright {
            flex: 3;
            height: 100%;
            background-color: aqua;
            border: 1px solid #ccc;
            font-size: 14px;
            line-height: 1.6;
            overflow: hidden;
        }

        @media (max-width: 1200px) {
            .site-slide {
                width: 100%;
                padding: 0 10px;
                height: auto;
                flex-direction: column;
                gap: 15px;
            }
            .slideleft {
                flex: none;
                height: 320px;
            }
            .slideright {
                flex: none;
                height: auto;
                padding: 15px;
            }
        }

        @media (max-width: 768px) {
            .slideleft {
                flex-direction: column;
                height: auto;
            }
            #slide-right {
                width: 100%;
                flex-direction: row;
                justify-content: center;
                margin-top: 10px;
            }
            .item-sr {
                width: 140px;
                height: 130px;
            }
        }

4、dome下载

相关推荐

发表回复

邮箱地址不会被公开。