- 自动播放
- 左右箭头切换
- 底部指示器(圆点)点击切换
- 平滑过渡效果
- 鼠标悬停时暂停
最终效果预览
第一步:准备工作
在开始之前,请确保你的项目已经引入了 jQuery 库,你可以从 jQuery 官网 下载,或者使用 CDN 链接(推荐,简单快捷)。

(图片来源网络,侵删)
使用 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">❮</button>
<button class="carousel-btn next-btn">❯</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 来设置样式。

(图片来源网络,侵删)
/* 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: hidden和transition: 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();
});
代码逻辑详解:
-
变量定义: 我们用 前缀来命名 jQuery 对象,这是一个良好的习惯。
currentIndex记录当前显示的是第几张图片(从 0 开始)。interval变量用于存储setInterval的返回值,以便之后可以清除它。
(图片来源网络,侵删) -
goToSlide(index)函数: 这是整个轮播图最核心的函数。- 它接收一个
index参数,表示要跳转到哪张图片。 - 它会处理边界情况。
index小于 0(比如在第一张时点“上一张”),就跳转到最后一张;index大于等于图片总数(比如在最后一张时点“下一张”),就跳转到第一张,这实现了无限循环。 - 它计算需要移动的距离:
- (currentIndex * 图片宽度),并使用$slide.css('transform', ...)来应用这个位移。 - 它更新底部指示器的状态,通过移除所有
active类,再给当前点击的指示器添加active类。
- 它接收一个
-
nextSlide()和prevSlide()函数: 这两个是简单的封装,分别调用goToSlide并传入currentIndex + 1或currentIndex - 1。 -
自动播放:
startAutoPlay()函数使用setInterval来定时调用nextSlide()。stopAutoPlay()函数使用clearInterval来停止定时器。- 重要: 在
startAutoPlay的开头先clearInterval,可以防止用户快速操作时产生多个定时器,导致轮播速度加快。
-
事件绑定:
on('click', ...): 为按钮和指示器绑定点击事件。$(this).data('index'): 这是 jQuery 获取 HTML5data-*属性值的方法,非常方便。mouseenter和mouseleave: 当鼠标进入轮播图区域时,调用stopAutoPlay暂停;当鼠标离开时,调用startAutoPlay继续播放,提升了用户体验。
-
启动: 在最后,我们调用
goToSlide(0)来确保轮播图从第一张开始显示,并调用startAutoPlay()来启动自动播放。
总结与扩展
将这三个文件(index.html, style.css, script.js)放在同一个目录下,用浏览器打开 index.html,你就可以看到一个功能完整的 jQuery 轮播图了。
可以进一步扩展的功能:
- 触摸滑动: 使用 jQuery 插件(如 TouchSwipe)或原生 JavaScript 的 Touch 事件来实现移动端的滑动切换。
- 淡入淡出效果: 修改 CSS 和 JS,使用
opacity和z-index来实现淡入淡出的切换效果,而不是滑动。 - 响应式设计: 优化 CSS,确保在不同屏幕尺寸下轮播图都能良好显示。
- 动态加载图片: 使用 jQuery 的
$.ajax从服务器动态获取图片列表,而不是写死在 HTML 中。
