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

网页图片切换特效html代码
(图片来源网络,侵删)

淡入淡出切换效果

这是最经典、最柔和的切换效果,适用于大多数网站。

效果描述

图片会平滑地淡出,然后下一张图片平滑地淡入。

代码实现

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 样式

网页图片切换特效html代码
(图片来源网络,侵删)
/* 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 结构

网页图片切换特效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">&#10094;</a>
        <a class="next">&#10095;</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);

如何使用和自定义

  1. 复制代码:将上述每个方案的 HTML, CSS, JavaScript 代码分别保存到对应的文件中(index.html, style.css, script.js)。
  2. 替换图片:将代码中的 src 属性值(如 https://via.placeholder.com/...)替换为您自己的图片路径。
  3. 调整样式:在 CSS 文件中修改 max-widthanimation-durationtransition 等属性,以改变幻灯片的大小、动画速度等。
  4. 调整逻辑:在 JavaScript 文件中修改 setTimeout 的时间(单位为毫秒)来改变自动播放的间隔。

这些代码都是基础版本,您可以根据需要添加更多功能,如指示器、全屏模式、触摸滑动支持等,希望这些代码能对您有所帮助!