自适应JS幻灯片展示模板

以下是一个完整的自适应幻灯片展示模板,包含HTML、CSS和JavaScript代码,能够在不同屏幕尺寸下自动调整。自适应JS幻灯片展示模板

自适应JS幻灯片展示模板代码片段:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自适应幻灯片展示</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Arial', sans-serif;
            background-color: #f5f5f5;
        }

        .slider-container {
            max-width: 1200px;
            margin: 30px auto;
            position: relative;
            overflow: hidden;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
            border-radius: 10px;
        }

        .slider {
            display: flex;
            transition: transform 0.5s ease-in-out;
            height: 400px;
        }

        @media (max-width: 768px) {
            .slider {
                height: 300px;
            }
        }

        @media (max-width: 480px) {
            .slider {
                height: 200px;
            }
        }

        .slide {
            min-width: 100%;
            position: relative;
        }

        .slide img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            display: block;
        }

        .slide-content {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: rgba(0, 0, 0, 0.5);
            color: white;
            padding: 20px;
            text-align: center;
        }

        .slide-title {
            font-size: 24px;
            margin-bottom: 10px;
        }

        .slide-description {
            font-size: 16px;
        }

        .slider-controls {
            position: absolute;
            top: 50%;
            width: 100%;
            display: flex;
            justify-content: space-between;
            transform: translateY(-50%);
            z-index: 10;
        }

        .slider-btn {
            background: rgba(255, 255, 255, 0.5);
            border: none;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            font-size: 20px;
            cursor: pointer;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: all 0.3s;
            margin: 0 15px;
        }

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

        .slider-dots {
            position: absolute;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);
            display: flex;
            gap: 10px;
            z-index: 10;
        }

        .slider-dot {
            width: 12px;
            height: 12px;
            border-radius: 50%;
            background: rgba(255, 255, 255, 0.5);
            cursor: pointer;
            transition: all 0.3s;
        }

        .slider-dot.active {
            background: white;
            transform: scale(1.2);
        }
    </style>
</head>
<body>
    <div class="slider-container">
        <div class="slider">
            <div class="slide">
                <img src="https://source.unsplash.com/random/1200x400?nature" alt="Slide 1">
                <div class="slide-content">
                    <h3 class="slide-title">美丽的自然风光</h3>
                    <p class="slide-description">探索大自然的奇妙与美丽</p>
                </div>
            </div>
            <div class="slide">
                <img src="https://source.unsplash.com/random/1200x400?city" alt="Slide 2">
                <div class="slide-content">
                    <h3 class="slide-title">现代都市</h3>
                    <p class="slide-description">感受城市的活力与节奏</p>
                </div>
            </div>
            <div class="slide">
                <img src="https://source.unsplash.com/random/1200x400?technology" alt="Slide 3">
                <div class="slide-content">
                    <h3 class="slide-title">科技创新</h3>
                    <p class="slide-description">体验科技带来的改变</p>
                </div>
            </div>
            <div class="slide">
                <img src="https://source.unsplash.com/random/1200x400?travel" alt="Slide 4">
                <div class="slide-content">
                    <h3 class="slide-title">旅行冒险</h3>
                    <p class="slide-description">发现世界的美好角落</p>
                </div>
            </div>
        </div>

        <div class="slider-controls">
            <button class="slider-btn prev-btn">&#10094;</button>
            <button class="slider-btn next-btn">&#10095;</button>
        </div>

        <div class="slider-dots">
            <div class="slider-dot active"></div>
            <div class="slider-dot"></div>
            <div class="slider-dot"></div>
            <div class="slider-dot"></div>
        </div>
    </div>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const slider = document.querySelector('.slider');
            const slides = document.querySelectorAll('.slide');
            const prevBtn = document.querySelector('.prev-btn');
            const nextBtn = document.querySelector('.next-btn');
            const dots = document.querySelectorAll('.slider-dot');
            
            let currentIndex = 0;
            let slideInterval;
            const slideCount = slides.length;
            
            // 初始化幻灯片位置
            function initSlider() {
                updateSlider();
                startSlideShow();
            }
            
            // 更新幻灯片位置和指示点
            function updateSlider() {
                slider.style.transform = `translateX(-${currentIndex * 100}%)`;
                
                // 更新指示点状态
                dots.forEach((dot, index) => {
                    dot.classList.toggle('active', index === currentIndex);
                });
            }
            
            // 切换到下一张幻灯片
            function nextSlide() {
                currentIndex = (currentIndex + 1) % slideCount;
                updateSlider();
            }
            
            // 切换到上一张幻灯片
            function prevSlide() {
                currentIndex = (currentIndex - 1 + slideCount) % slideCount;
                updateSlider();
            }
            
            // 开始自动轮播
            function startSlideShow() {
                slideInterval = setInterval(nextSlide, 5000);
            }
            
            // 停止自动轮播
            function stopSlideShow() {
                clearInterval(slideInterval);
            }
            
            // 事件监听
            nextBtn.addEventListener('click', () => {
                nextSlide();
                stopSlideShow();
                startSlideShow();
            });
            
            prevBtn.addEventListener('click', () => {
                prevSlide();
                stopSlideShow();
                startSlideShow();
            });
            
            // 点击指示点跳转到对应幻灯片
            dots.forEach((dot, index) => {
                dot.addEventListener('click', () => {
                    currentIndex = index;
                    updateSlider();
                    stopSlideShow();
                    startSlideShow();
                });
            });
            
            // 鼠标悬停时暂停轮播
            slider.addEventListener('mouseenter', stopSlideShow);
            slider.addEventListener('mouseleave', startSlideShow);
            
            // 触摸事件支持
            let touchStartX = 0;
            let touchEndX = 0;
            
            slider.addEventListener('touchstart', (e) => {
                touchStartX = e.changedTouches[0].screenX;
                stopSlideShow();
            });
            
            slider.addEventListener('touchend', (e) => {
                touchEndX = e.changedTouches[0].screenX;
                handleSwipe();
                startSlideShow();
            });
            
            function handleSwipe() {
                const threshold = 50;
                
                if (touchEndX < touchStartX - threshold) {
                    nextSlide();
                } else if (touchEndX > touchStartX + threshold) {
                    prevSlide();
                }
            }
            
            // 响应式调整
            window.addEventListener('resize', () => {
                slider.style.transition = 'none';
                updateSlider();
                setTimeout(() => {
                    slider.style.transition = 'transform 0.5s ease-in-out';
                }, 10);
            });
            
            // 初始化
            initSlider();
        });
    </script>
</body>
</html>

功能特点

  1. 完全响应式设计:自动适应不同屏幕尺寸
  2. 自动轮播:每5秒自动切换幻灯片
  3. 导航控制
    • 左右箭头按钮手动控制
    • 底部指示点快速跳转
  4. 触摸支持:支持移动设备上的滑动操作
  5. 交互优化
    • 鼠标悬停时暂停自动轮播
    • 平滑的过渡动画效果
  6. 可自定义内容:轻松修改图片、标题和描述

使用方法

  1. 将上述代码复制到一个HTML文件中
  2. 替换图片URL为你自己的图片链接
  3. 修改标题和描述内容
  4. 可根据需要调整CSS样式(如高度、颜色等)

这个模板使用了纯JavaScript实现,不依赖任何外部库,可以直接在任何现代浏览器中运行。

发表评论