• 自动播放
  • 左右箭头切换
  • 底部指示器(圆点)点击切换
  • 平滑过渡效果
  • 鼠标悬停时暂停

最终效果预览


第一步:准备工作

在开始之前,请确保你的项目已经引入了 jQuery 库,你可以从 jQuery 官网 下载,或者使用 CDN 链接(推荐,简单快捷)。

结合jquery做一个网页轮播图
(图片来源网络,侵删)

使用 CDN 引入 jQuery: 在你的 HTML 文件的 <head> 标签内添加以下代码:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

第二步:HTML 结构

我们需要构建一个清晰的 HTML 结构来容纳轮播图的所有部分,主要包括一个容器、图片列表、左右箭头和底部指示器。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">jQuery 轮播图</title>
    <!-- 引入 CSS 文件 -->
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="carousel-container">
        <!-- 轮播图主体,图片列表 -->
        <div class="carousel-slide">
            <!-- 使用 data-index 来方便 jQuery 识别图片位置 -->
            <img src="https://images.unsplash.com/photo-1506905925346-21bda4d32df4?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80" alt="Slide 1" data-index="0">
            <img src="https://images.unsplash.com/photo-1470225620780-dba8ba36b745?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80" alt="Slide 2" data-index="1">
            <img src="https://images.unsplash.com/photo-1518717758536-85ae29035b6d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80" alt="Slide 3" data-index="2">
            <img src="https://images.unsplash.com/photo-1493246507139-91e8fad9978e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80" alt="Slide 4" data-index="3">
        </div>
        <!-- 左右箭头 -->
        <button class="carousel-btn prev-btn">&#10094;</button>
        <button class="carousel-btn next-btn">&#10095;</button>
        <!-- 底部指示器 -->
        <div class="carousel-indicators">
            <span class="dot active" data-index="0"></span>
            <span class="dot" data-index="1"></span>
            <span class="dot" data-index="2"></span>
            <span class="dot" data-index="3"></span>
        </div>
    </div>
    <!-- 引入 jQuery 库 -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <!-- 引入 JS 文件 -->
    <script src="script.js"></script>
</body>
</html>

结构说明:

  • .carousel-container: 整个轮播图的外层容器,用于设置样式和定位。
  • .carousel-slide: 图片列表容器,overflow: hidden 是实现切换效果的关键。
  • img: 轮播图图片,我们给每张图片添加了 data-index 属性,方便在 JS 中通过索引来操作。
  • .carousel-btn: 左右切换按钮。
  • .carousel-indicators: 底部指示器容器。
  • .dot: 单个指示器圆点。

第三步:CSS 样式

为了让轮播图看起来美观且功能正常,我们需要用 CSS 来设置样式。

结合jquery做一个网页轮播图
(图片来源网络,侵删)
/* style.css */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body {
    font-family: Arial, sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    background-color: #f4f4f4;
}
/* 轮播图容器 */
.carousel-container {
    position: relative;
    width: 80%;
    max-width: 1000px;
    overflow: hidden; /* 隐藏超出容器宽度的部分 */
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
/* 图片列表 */
.carousel-slide {
    display: flex; /* 使用 Flexbox 布局,让图片水平排列 */
    transition: transform 0.5s ease-in-out; /* 平滑过渡效果 */
}
.carousel-slide img {
    width: 100%;
    height: auto;
    flex-shrink: 0; /* 防止图片被压缩 */
}
/* 左右箭头 */
.carousel-btn {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    background-color: rgba(0, 0, 0, 0.5);
    color: white;
    border: none;
    font-size: 2rem;
    cursor: pointer;
    padding: 10px 15px;
    border-radius: 50%;
    transition: background-color 0.3s ease;
}
.carousel-btn:hover {
    background-color: rgba(0, 0, 0, 0.8);
}
.prev-btn {
    left: 10px;
}
.next-btn {
    right: 10px;
}
/* 底部指示器 */
.carousel-indicators {
    position: absolute;
    bottom: 20px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    gap: 10px;
}
.dot {
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background-color: rgba(255, 255, 255, 0.5);
    cursor: pointer;
    transition: background-color 0.3s ease;
}
.dot.active {
    background-color: white;
}

样式说明:

  • .carousel-container 设置了 position: relative,这样里面的绝对定位元素(按钮和指示器)就可以相对于它来定位。
  • .carousel-slide 设置了 display: flex,让所有图片排成一行。overflow: hiddentransition: transform 是实现无缝切换的核心。
  • 切换原理:我们不是直接隐藏/显示图片,而是通过移动整个 .carousel-slide 容器(transform: translateX())来展示不同的图片部分。
  • 按钮和指示器都设置了悬停效果,提升用户体验。

第四步:jQuery 逻辑 (script.js)

这是轮播图的核心,我们将用 jQuery 来实现所有的交互功能。

// script.js
$(document).ready(function() {
    // --- 1. 定义变量 ---
    const $slide = $('.carousel-slide');
    const $images = $slide.find('img');
    const $dots = $('.dot');
    const $prevBtn = $('.prev-btn');
    const $nextBtn = $('.next-btn');
    const imageCount = $images.length;
    let currentIndex = 0; // 当前显示的图片索引
    let interval; // 用于存储定时器的变量
    // --- 2. 初始化 ---
    // 将除了第一张以外的所有图片隐藏
    // $images.not(':first').hide(); // 另一种方法,但使用 transform 更高效
    // 我们使用 transform 来移动,所以不需要 hide()
    // --- 3. 核心功能函数 ---
    // 切换到指定索引的图片
    function goToSlide(index) {
        // 确保索引在有效范围内
        if (index < 0) {
            index = imageCount - 1;
        } else if (index >= imageCount) {
            index = 0;
        }
        currentIndex = index;
        // 移动图片列表
        // translateX 的计算公式:- (当前索引 * 图片宽度)
        const slideWidth = $images.eq(0).width();
        $slide.css('transform', `translateX(-${currentIndex * slideWidth}px)`);
        // 更新指示器
        $dots.removeClass('active'); // 移除所有 active 类
        $dots.eq(currentIndex).addClass('active'); // 给当前索引的指示器添加 active 类
    }
    // 下一张
    function nextSlide() {
        goToSlide(currentIndex + 1);
    }
    // 上一张
    function prevSlide() {
        goToSlide(currentIndex - 1);
    }
    // 自动播放
    function startAutoPlay() {
        // 先清除之前的定时器,防止重复点击导致多个定时器同时运行
        clearInterval(interval);
        interval = setInterval(nextSlide, 3000); // 每 3 秒切换一次
    }
    // 停止自动播放
    function stopAutoPlay() {
        clearInterval(interval);
    }
    // --- 4. 事件绑定 ---
    // 左右箭头点击事件
    $nextBtn.on('click', nextSlide);
    $prevBtn.on('click', prevSlide);
    // 底部指示器点击事件
    $dots.on('click', function() {
        const targetIndex = $(this).data('index'); // 获取 data-index 的值
        goToSlide(targetIndex);
    });
    // 鼠标悬停时暂停,移出时继续播放
    $('.carousel-container').on({
        mouseenter: stopAutoPlay,
        mouseleave: startAutoPlay
    });
    // --- 5. 启动 ---
    // 初始化轮播图到第一张
    goToSlide(0);
    // 开始自动播放
    startAutoPlay();
});

代码逻辑详解:

  1. 变量定义: 我们用 前缀来命名 jQuery 对象,这是一个良好的习惯。currentIndex 记录当前显示的是第几张图片(从 0 开始)。interval 变量用于存储 setInterval 的返回值,以便之后可以清除它。

    结合jquery做一个网页轮播图
    (图片来源网络,侵删)
  2. goToSlide(index) 函数: 这是整个轮播图最核心的函数。

    • 它接收一个 index 参数,表示要跳转到哪张图片。
    • 它会处理边界情况。index 小于 0(比如在第一张时点“上一张”),就跳转到最后一张;index 大于等于图片总数(比如在最后一张时点“下一张”),就跳转到第一张,这实现了无限循环。
    • 它计算需要移动的距离:- (currentIndex * 图片宽度),并使用 $slide.css('transform', ...) 来应用这个位移。
    • 它更新底部指示器的状态,通过移除所有 active 类,再给当前点击的指示器添加 active 类。
  3. nextSlide()prevSlide() 函数: 这两个是简单的封装,分别调用 goToSlide 并传入 currentIndex + 1currentIndex - 1

  4. 自动播放:

    • startAutoPlay() 函数使用 setInterval 来定时调用 nextSlide()
    • stopAutoPlay() 函数使用 clearInterval 来停止定时器。
    • 重要: 在 startAutoPlay 的开头先 clearInterval,可以防止用户快速操作时产生多个定时器,导致轮播速度加快。
  5. 事件绑定:

    • on('click', ...): 为按钮和指示器绑定点击事件。
    • $(this).data('index'): 这是 jQuery 获取 HTML5 data-* 属性值的方法,非常方便。
    • mouseentermouseleave: 当鼠标进入轮播图区域时,调用 stopAutoPlay 暂停;当鼠标离开时,调用 startAutoPlay 继续播放,提升了用户体验。
  6. 启动: 在最后,我们调用 goToSlide(0) 来确保轮播图从第一张开始显示,并调用 startAutoPlay() 来启动自动播放。


总结与扩展

将这三个文件(index.html, style.css, script.js)放在同一个目录下,用浏览器打开 index.html,你就可以看到一个功能完整的 jQuery 轮播图了。

可以进一步扩展的功能:

  • 触摸滑动: 使用 jQuery 插件(如 TouchSwipe)或原生 JavaScript 的 Touch 事件来实现移动端的滑动切换。
  • 淡入淡出效果: 修改 CSS 和 JS,使用 opacityz-index 来实现淡入淡出的切换效果,而不是滑动。
  • 响应式设计: 优化 CSS,确保在不同屏幕尺寸下轮播图都能良好显示。
  • 动态加载图片: 使用 jQuery 的 $.ajax 从服务器动态获取图片列表,而不是写死在 HTML 中。