教程目录
- 准备工作
- 引入 jQuery 和 jQuery UI
- 准备 HTML 结构
- 准备 CSS 样式
- 最基础的淡入淡出切换
- 核心思路
- 完整代码
- 带左右箭头和指示器的切换
- 功能增强
- HTML 结构调整
- CSS 样式调整
- jQuery 代码调整
- 使用 jQuery UI 实现滑动切换
- 优势
- 代码调整
- 总结与最佳实践
准备工作
在开始之前,我们需要准备好三样东西:库文件、HTML 结构和 CSS 样式。

(图片来源网络,侵删)
1 引入 jQuery 和 jQuery UI
jQuery UI 是一个基于 jQuery 的库,它提供了许多丰富的交互效果,比如我们的滑动效果。
在 <head> 标签内引入它们:
<!-- 引入 jQuery 核心库 --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- 引入 jQuery UI 核心库和主题样式 --> <!-- 我们使用官方 CDN,方便快捷 --> <link rel="stylesheet" href="https://code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.13.2/jquery-ui.min.js"></script>
2 准备 HTML 结构
创建一个容器来包裹所有的图片,并为第一张图片添加一个 active 类,用于默认显示。
<div class="slider-container">
<div class="slides">
<!-- 默认显示第一张,所以给它 active 类 -->
<img src="https://via.placeholder.com/800x400/FF5733/FFFFFF?text=Slide+1" class="active" alt="Slide 1">
<img src="https://via.placeholder.com/800x400/33FF57/FFFFFF?text=Slide+2" alt="Slide 2">
<img src="https://via.placeholder.com/800x400/3357FF/FFFFFF?text=Slide+3" alt="Slide 3">
<img src="https://via.placeholder.com/800x400/F333FF/FFFFFF?text=Slide+4" alt="Slide 4">
</div>
</div>
3 准备 CSS 样式
为了确保图片能正确切换,我们需要一些基本的 CSS 样式,关键点:

(图片来源网络,侵删)
.slides容器设置position: relative和overflow: hidden。- 每张图片默认都设置为
display: none。 - 通过
.active类来控制当前显示的图片 (display: block)。
/* 轮播图容器 */
.slider-container {
width: 800px;
height: 400px;
margin: 50px auto;
position: relative; /* 为内部绝对定位的图片提供参考 */
border: 1px solid #ccc;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
/* 图片列表容器 */
.slides {
width: 100%;
height: 100%;
position: relative;
}
/* 所有图片默认隐藏 */
.slides img {
width: 100%;
height: 100%;
object-fit: cover; /* 保证图片不变形 */
display: none; /* 关键:默认隐藏所有图片 */
position: absolute; /* 让所有图片重叠在一起 */
top: 0;
left: 0;
}
/* 当前显示的图片 */
.slides img.active {
display: block; /* 关键:显示带有 active 类的图片 */
}
实现一:最基础的淡入淡出切换
1 核心思路
- 找到所有图片,并存储在一个变量中。
- 设置一个定时器,每隔几秒就执行一次切换函数。
- 切换函数的逻辑:
- 找到当前正在显示的图片(带有
active类的)。 - 移除它的
active类,让它隐藏。 - 找到下一张图片。
- 如果已经是最后一张,则循环到第一张。
- 给下一张图片添加
active类,让它显示。
- 找到当前正在显示的图片(带有
2 完整代码
将以下 jQuery 代码放在 </body> 标签之前。
<script>
$(document).ready(function(){
// 1. 获取所有图片
const $slides = $('.slides img');
let currentIndex = 0; // 当前显示的图片索引
// 2. 创建一个切换函数
function switchSlide() {
// 移除当前图片的 active 类
$slides.eq(currentIndex).removeClass('active');
// 计算下一张图片的索引
currentIndex = (currentIndex + 1) % $slides.length;
// 给下一张图片添加 active 类
$slides.eq(currentIndex).addClass('active');
}
// 3. 设置定时器,每3秒切换一次
setInterval(switchSlide, 3000);
});
</script>
代码解释:
$(document).ready(function(){...}): 确保页面所有元素都加载完毕后再执行 jQuery 代码。$('.slides img'): 选择器,选中.slides容器内的所有<img>let currentIndex = 0;: 用一个变量记录当前显示的是第几张图片(索引从0开始)。$slides.eq(currentIndex):.eq()方法可以根据索引获取集合中的某一个元素。$slides.eq(0)就是第一张图片。.removeClass('active'): 移除 CSS 类。.addClass('active'): 添加 CSS 类。currentIndex = (currentIndex + 1) % $slides.length;: 这是实现循环的关键。$slides.length是图片的总数(比如4)。- 当
currentIndex是 3 (最后一张) 时,(3 + 1) % 4结果是0,这样就回到了第一张,实现了无缝循环。
setInterval(switchSlide, 3000): 设置一个定时器,每隔 3000 毫秒(3秒)就调用一次switchSlide函数。
打开你的 HTML 文件,你应该能看到一个自动播放的、带有淡入淡出效果的图片轮播图了!
实现二:带左右箭头和指示器的切换
现在我们给它加上左右箭头和底部的小圆点指示器,让用户可以手动控制。

(图片来源网络,侵删)
1 HTML 结构调整
在 .slider-container 内添加控制按钮和指示器。
<div class="slider-container">
<!-- ... 图片列表 ... -->
<!-- 左右箭头 -->
<button class="prev-btn"><</button>
<button class="next-btn">></button>
<!-- 指示器 -->
<div class="indicators">
<span class="indicator active" data-index="0">1</span>
<span class="indicator" data-index="1">2</span>
<span class="indicator" data-index="2">3</span>
<span class="indicator" data-index="3">4</span>
</div>
</div>
2 CSS 样式调整
为新添加的元素添加样式。
/* ... (之前的CSS保持不变) ... */
/* 左右箭头 */
.prev-btn, .next-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
background-color: rgba(0, 0, 0, 0.5);
color: white;
border: none;
font-size: 24px;
padding: 10px 15px;
cursor: pointer;
z-index: 10;
border-radius: 50%;
transition: background-color 0.3s;
}
.prev-btn {
left: 10px;
}
.next-btn {
right: 10px;
}
.prev-btn:hover, .next-btn:hover {
background-color: rgba(0, 0, 0, 0.8);
}
/* 指示器 */
.indicators {
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 10px;
}
.indicator {
width: 12px;
height: 12px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.5);
cursor: pointer;
display: inline-block;
}
.indicator.active {
background-color: white;
}
3 jQuery 代码调整
我们需要增加处理点击事件的功能。
<script>
$(document).ready(function(){
const $slides = $('.slides img');
const $indicators = $('.indicator');
const $prevBtn = $('.prev-btn');
const $nextBtn = $('.next-btn');
let currentIndex = 0;
// 切换函数 (稍微优化,接受一个索引作为参数)
function goToSlide(index) {
// 边界检查
if (index < 0) index = $slides.length - 1;
if (index >= $slides.length) index = 0;
$slides.eq(currentIndex).removeClass('active');
$indicators.eq(currentIndex).removeClass('active');
currentIndex = index;
$slides.eq(currentIndex).addClass('active');
$indicators.eq(currentIndex).addClass('active');
}
// 自动播放
setInterval(() => goToSlide(currentIndex + 1), 3000);
// 点击上一张
$prevBtn.on('click', function(){
goToSlide(currentIndex - 1);
});
// 点击下一张
$nextBtn.on('click', function(){
goToSlide(currentIndex + 1);
});
// 点击指示器
$indicators.on('click', function(){
const targetIndex = $(this).data('index'); // 获取 data-index 属性的值
goToSlide(targetIndex);
});
});
</script>
代码解释:
- 我们优化了
switchSlide函数,重命名为goToSlide,并让它接收一个目标索引index。 - 这样无论是自动播放、点击箭头还是点击指示器,都可以调用同一个函数,使代码更简洁、逻辑更清晰。
$(this): 在事件处理函数中,this指向触发事件的 DOM 元素,就是被点击的那个.indicator。.data('index'): 获取该元素上data-index属性的值(点击第二个指示器时,会获取到1)。.on('click', function(){...}): 为元素绑定点击事件。
你的轮播图功能就非常完整了!
实现三:使用 jQuery UI 实现滑动切换
淡入淡出效果很平滑,但滑动切换通常更酷炫,使用 jQuery UI,我们只需要修改几行代码。
1 优势
- 代码量少:利用现成的动画效果,无需自己写复杂的动画逻辑。
- 性能好:jQuery UI 的动画经过优化。
- 效果丰富:除了
slide,还有fade、blind、clip等多种效果。
2 代码调整
我们只需要修改 goToSlide 函数,利用 jQuery UI 的 .switchClass() 或 .animate() 方法。
这里我们使用 .switchClass() 配合 slide 效果。
<!-- 确保你已经引入了 jQuery UI (如1.1节所示) -->
<script>
$(document).ready(function(){
const $slides = $('.slides img');
const $indicators = $('.indicator');
const $prevBtn = $('.prev-btn');
const $nextBtn = $('.next-btn');
let currentIndex = 0;
function goToSlide(index) {
if (index < 0) index = $slides.length - 1;
if (index >= $slides.length) index = 0;
// jQuery UI 的切换类效果
// 从 'slide-left' 切换到 'slide-right',实现滑动
// 注意:我们需要预先定义这些类
$slides.eq(currentIndex).switchClass('slide-active', 'slide-inactive', 'slow');
$indicators.eq(currentIndex).removeClass('active');
currentIndex = index;
$slides.eq(currentIndex).switchClass('slide-inactive', 'slide-active', 'slow');
$indicators.eq(currentIndex).addClass('active');
}
// ... (自动播放和点击事件代码与上面相同) ...
});
</script>
我们需要在 CSS 中添加 jQuery UI 效果所需的类:
/* jQuery UI 滑动效果所需的类 */
.slide-active {
display: block !important;
left: 0 !important;
}
.slide-inactive {
display: block !important; /* 在动画过程中需要显示 */
left: -100% !important; /* 从左侧滑出 */
}
/* 为下一张图片准备的初始状态 */
.slides img:not(.slide-active) {
left: 100%; /* 从右侧滑入 */
}
注意:使用 jQuery UI 的滑动效果会比淡入淡出需要更多的 CSS 配合,因为它涉及到元素的位移,在实际项目中,更推荐使用专业的轮播图插件,它们已经处理好了所有细节。
总结与最佳实践
- 从简单开始:先实现最基础的功能,再逐步添加交互和美化。
- 代码复用:将核心逻辑(如
goToSlide)封装成函数,避免重复代码。 - 考虑用户体验:
- 添加
cursor: pointer让用户知道按钮可以点击。 - 添加过渡效果 (
transition) 让交互更平滑。 - 考虑添加触摸滑动支持,这对移动端用户很重要(这通常需要更复杂的代码或使用插件)。
- 添加
- 使用插件:对于生产环境,强烈建议使用成熟的轮播图插件,如:
这些插件功能强大、性能优异、兼容性好,并且支持响应式设计,能帮你节省大量的开发时间。
希望这份教程能帮助你掌握 jQuery 图片切换的核心技术!
