我们将使用 HTML 来构建结构,CSS 来实现样式和基础动画效果,以及 JavaScript 来控制切换逻辑。

(图片来源网络,侵删)
淡入淡出切换效果
这是最经典、最柔和的切换效果,适用于大多数网站。
效果描述
图片会平滑地淡出,然后下一张图片平滑地淡入。
代码实现
HTML 结构
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">淡入淡出图片切换</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="slideshow-container">
<div class="slide fade">
<img src="https://via.placeholder.com/800x400?text=图片1" style="width:100%">
</div>
<div class="slide fade">
<img src="https://via.placeholder.com/800x400?text=图片2" style="width:100%">
</div>
<div class="slide fade">
<img src="https://via.placeholder.com/800x400?text=图片3" style="width:100%">
</div>
</div>
<script src="script.js"></script>
</body>
</html>
CSS 样式

(图片来源网络,侵删)
/* style.css */
* {box-sizing: border-box;}
body {
font-family: Verdana, sans-serif;
margin: 0;
}
/* 幻灯片容器 */
.slideshow-container {
max-width: 800px;
position: relative;
margin: auto;
}
/* 每张幻灯片的基础样式 */
.slide {
display: none; /* 默认隐藏所有图片 */
}
/* 淡入动画的类 */
.fade {
animation-name: fade;
animation-duration: 1.5s;
}
@keyframes fade {
from {opacity: .4}
to {opacity: 1}
}
JavaScript 逻辑
// script.js
let slideIndex = 0;
showSlides();
function showSlides() {
let i;
let slides = document.getElementsByClassName("slide");
// 先隐藏所有图片
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
// 如果索引超出图片数量,则回到第一张
if (slideIndex > slides.length) {slideIndex = 1}
// 显示当前图片
slides[slideIndex-1].style.display = "block";
// 每2.5秒自动切换一次
setTimeout(showSlides, 2500);
}
滑动切换效果
这种效果更具动感和现代感,像轮播图一样。
效果描述
图片从一侧滑入,另一侧滑出。
代码实现
HTML 结构

(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">滑动切换图片</title>
<link rel="stylesheet" href="slide_style.css">
</head>
<body>
<div class="slideshow-container">
<div class="slides">
<div class="slide"><img src="https://via.placeholder.com/800x400?text=滑动图片1" style="width:100%"></div>
<div class="slide"><img src="https://via.placeholder.com/800x400?text=滑动图片2" style="width:100%"></div>
<div class="slide"><img src="https://via.placeholder.com/800x400?text=滑动图片3" style="width:100%"></div>
</div>
<!-- 左右箭头 -->
<a class="prev">❮</a>
<a class="next">❯</a>
</div>
<script src="slide_script.js"></script>
</body>
</html>
CSS 样式
/* slide_style.css */
* {box-sizing: border-box;}
body {font-family: Verdana, sans-serif; margin:0;}
/* 幻灯片容器 */
.slideshow-container {
max-width: 800px;
position: relative;
margin: auto;
overflow: hidden; /* 关键:隐藏溢出的图片 */
}
/* 图片容器 */
.slides {
display: flex; /* 使用flex布局让图片并排 */
transition: transform 0.5s ease-in-out; /* 关键:平滑过渡效果 */
}
/* 每张图片 */
.slide {
width: 100%;
flex-shrink: 0; /* 防止图片被压缩 */
}
/* 箭头样式 */
.prev, .next {
cursor: pointer;
position: absolute;
top: 50%;
width: auto;
margin-top: -22px;
padding: 16px;
color: white;
font-weight: bold;
font-size: 18px;
background-color: rgba(0,0,0,0.5);
border: none;
user-select: none;
}
/* 箭头位置 */
.next {
right: 0;
border-radius: 3px 0 0 3px;
}
.prev {
left: 0;
border-radius: 0 3px 3px 0;
}
/* 鼠标悬停时箭头变亮 */
.prev:hover, .next:hover {
background-color: rgba(0,0,0,0.8);
}
JavaScript 逻辑
// slide_script.js
let slideIndex = 0;
showSlides(slideIndex);
// 通过箭头切换
function plusSlides(n) {
showSlides(slideIndex += n);
}
function showSlides(n) {
let i;
let slides = document.getElementsByClassName("slide");
let slidesContainer = document.querySelector(".slides");
// 如果超出范围,循环播放
if (n > slides.length - 1) {slideIndex = 0}
if (n < 0) {slideIndex = slides.length - 1}
// 使用 transform: translateX() 来移动图片
slidesContainer.style.transform = `translateX(${-slideIndex * 100}%)`;
}
// 为箭头添加事件监听器
document.querySelector(".prev").addEventListener("click", () => plusSlides(-1));
document.querySelector(".next").addEventListener("click", () => plusSlides(1));
// 可选:添加自动播放
// setInterval(() => plusSlides(1), 3000);
带缩略图和控制点的切换效果
这是一种功能更完整的幻灯片,用户可以通过点击缩略图或底部的控制点来快速切换图片。
效果描述
主图切换时,对应的缩略图和控制点会高亮显示。
代码实现
HTML 结构
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">带缩略图的切换</title>
<link rel="stylesheet" href="thumb_style.css">
</head>
<body>
<div class="slideshow-container">
<!-- 主图区域 -->
<div class="main-slides fade">
<div class="slide fade">
<img src="https://via.placeholder.com/800x400?text=主图1" style="width:100%">
</div>
<div class="slide fade">
<img src="https://via.placeholder.com/800x400?text=主图2" style="width:100%">
</div>
<div class="slide fade">
<img src="https://via.placeholder.com/800x400?text=主图3" style="width:100%">
</div>
</div>
<!-- 缩略图区域 -->
<div class="thumbnails">
<img src="https://via.placeholder.com/100x50?text=缩略图1" class="thumbnail" onclick="currentSlide(1)">
<img src="https://via.placeholder.com/100x50?text=缩略图2" class="thumbnail" onclick="currentSlide(2)">
<img src="https://via.placeholder.com/100x50?text=缩略图3" class="thumbnail" onclick="currentSlide(3)">
</div>
</div>
<script src="thumb_script.js"></script>
</body>
</html>
CSS 样式
/* thumb_style.css */
* {box-sizing: border-box;}
body {font-family: Verdana, sans-serif; margin:0;}
/* 主图容器 */
.main-slides {
position: relative;
max-width: 800px;
margin: auto;
}
/* 主图 */
.main-slides .slide {
display: none;
}
/* 淡入效果 */
.fade {
animation-name: fade;
animation-duration: 1.5s;
}
@keyframes fade {
from {opacity: .4}
to {opacity: 1}
}
/* 缩略图容器 */
.thumbnails {
display: flex;
justify-content: center;
padding: 10px;
}
/* 缩略图样式 */
.thumbnail {
width: 100px;
height: 50px;
margin: 0 5px;
cursor: pointer;
opacity: 0.6;
transition: opacity 0.3s;
}
/* 鼠标悬停和当前激活的缩略图 */
.thumbnail:hover, .thumbnail.active {
opacity: 1;
}
JavaScript 逻辑
// thumb_script.js
let slideIndex = 1;
showSlides(slideIndex);
// 切换到指定幻灯片
function currentSlide(n) {
showSlides(slideIndex = n);
}
function showSlides(n) {
let i;
let slides = document.getElementsByClassName("slide");
let thumbs = document.getElementsByClassName("thumbnail");
// 如果索引超出范围,循环播放
if (n > slides.length) {slideIndex = 1}
if (n < 1) {slideIndex = slides.length}
// 隐藏所有主图
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
// 移除所有缩略图的激活状态
for (i = 0; i < thumbs.length; i++) {
thumbs[i].classList.remove("active");
}
// 显示当前主图
slides[slideIndex-1].style.display = "block";
// 激活当前缩略图
thumbs[slideIndex-1].classList.add("active");
}
// 可选:添加自动播放
// setInterval(() => {
// slideIndex++;
// if (slideIndex > document.getElementsByClassName("slide").length) {slideIndex = 1}
// showSlides(slideIndex);
// }, 3000);
如何使用和自定义
- 复制代码:将上述每个方案的
HTML,CSS,JavaScript代码分别保存到对应的文件中(index.html,style.css,script.js)。 - 替换图片:将代码中的
src属性值(如https://via.placeholder.com/...)替换为您自己的图片路径。 - 调整样式:在 CSS 文件中修改
max-width、animation-duration、transition等属性,以改变幻灯片的大小、动画速度等。 - 调整逻辑:在 JavaScript 文件中修改
setTimeout的时间(单位为毫秒)来改变自动播放的间隔。
这些代码都是基础版本,您可以根据需要添加更多功能,如指示器、全屏模式、触摸滑动支持等,希望这些代码能对您有所帮助!
