0

0

使用JavaScript数组实现循环图片轮播教程

心靈之曲

心靈之曲

发布时间:2025-10-07 13:07:00

|

265人浏览过

|

来源于php中文网

原创

使用javascript数组实现循环图片轮播教程

本教程将详细指导您如何使用HTML、CSS和JavaScript构建一个功能完整的图片轮播组件,重点讲解如何实现图片在首尾之间平滑循环切换的逻辑。通过本教程,您将掌握使用JavaScript数组管理轮播项、利用CSS控制显示效果以及实现无缝循环的关键技巧。

1. 简介

图片轮播(Image Carousel)是网页设计中常见的交互元素,用于在有限空间内展示多张图片或内容。一个基础的轮播功能包括显示当前图片、切换到上一张或下一张图片。然而,一个高级的轮播组件还应具备“循环”功能,即当用户从最后一张图片点击“下一张”时,能够回到第一张;从第一张点击“上一张”时,能够跳转到最后一张。本教程将专注于实现这一核心的循环逻辑。

2. HTML 结构

首先,我们需要定义轮播组件的HTML骨架。我们使用一个主容器来包裹轮播区域和导航按钮。




    
    
    JavaScript 循环图片轮播
    


    
1
2
3
4

结构说明:

  • ain> 元素作为页面的主要内容区域。
  • 容器包含所有轮播项。每个轮播项是一个
  • 初始时,第一个轮播项被赋予 active 类,表示它是当前可见的。
  • 容器包含导航按钮。
  • 3. CSS 样式

    接下来,我们为轮播组件添加样式,使其在视觉上符合预期。关键在于如何隐藏非当前图片,并确保只有 active 类图片可见。

    立即学习Java免费学习笔记(深入)”;

    /* style.css */
    html {
      font: 300 3vmin/1 Consolas;
    }
    
    body {
      display: flex;
      justify-content: center;
      align-items: center;
      min-height: 100vh; /* 确保body至少占满视口高度 */
      margin: 0;
      background-color: #f0f0f0;
    }
    
    main {
      display: flex;
      justify-content: center;
      align-items: center;
      position: relative;
      max-width: max-content;
    }
    
    .slides {
      display: flex;
      justify-content: center;
      align-items: center;
      position: relative;
      width: 420px; /* 轮播区域宽度 */
      height: 400px; /* 轮播区域高度 */
      overflow: hidden; /* 隐藏超出容器的轮播项 */
    }
    
    .slide {
      display: grid;
      place-items: center;
      position: absolute; /* 使所有图片重叠 */
      top: 50%;
      left: 50%;
      width: 400px;
      height: 350px;
      border-radius: 20px;
      font-size: 50px;
      font-weight: 600;
      box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
      visibility: hidden; /* 默认隐藏所有图片 */
      transform: translate(-50%, -50%); /* 居中定位 */
      transition: visibility 0.3s ease-in-out; /* 添加过渡效果 */
    }
    
    /* 只有带有active类的图片才可见 */
    .active {
      visibility: visible;
    }
    
    /* 为每个轮播项设置不同的背景颜色 */
    .slide:first-of-type {
      background-color: #F7EC09;
    }
    
    .slide:nth-of-type(2) {
      background-color: #3EC70B;
    }
    
    .slide:nth-of-type(3) {
      background-color: #3B44F6;
    }
    
    .slide:nth-of-type(4) {
      background-color: #A149FA;
    }
    
    .ctrl {
      display: flex;
      justify-content: space-between;
      position: absolute;
      top: 45%; /* 调整按钮垂直位置 */
      left: 50%; /* 相对于main容器居中 */
      width: 120%; /* 按钮容器宽度,略大于slides容器 */
      transform: translate(-50%, -50%); /* 居中定位 */
      padding: 0 20px; /* 确保按钮不会紧贴边缘 */
      box-sizing: border-box;
    }
    
    .next,
    .prev {
      border: none;
      font-size: 100px;
      font-weight: 700;
      background: none;
      cursor: pointer;
      color: #333; /* 按钮颜色 */
      opacity: 0.7;
      transition: opacity 0.2s ease;
    }
    
    .next:hover,
    .prev:hover {
      opacity: 1;
    }

    CSS 关键点:

    • .slides 容器使用 position: relative 和 overflow: hidden 来创建一个限制区域。
    • .slide 项使用 position: absolute 使它们重叠,并通过 transform: translate(-50%, -50%) 精确居中。
    • visibility: hidden 默认隐藏所有 .slide,只有当添加 active 类时,通过 visibility: visible 才能显示。
    • transition 属性为 visibility 变化添加平滑效果。
    • .ctrl 容器用于定位导航按钮,使其位于轮播区域的两侧。

    4. JavaScript 逻辑

    JavaScript 是实现轮播交互的核心。我们将编写代码来处理按钮点击事件,并实现图片索引的循环切换逻辑。

    // script.js
    
    // 获取导航按钮
    const prevButton = document.querySelector('.prev');
    const nextButton = document.querySelector('.next');
    
    // 获取所有轮播项,并转换为数组
    const slides = [...document.querySelectorAll('.slide')];
    const totalSlides = slides.length; // 轮播项总数
    
    let currentIndex = 0; // 当前显示的轮播项索引
    
    // 初始化:确保第一个轮播项有active类(HTML中已设置,这里是防御性编程)
    // 如果HTML中没有设置,可以在这里添加:slides[currentIndex].classList.add('active');
    
    // 绑定点击事件
    prevButton.onclick = () => moveSlide(currentIndex - 1);
    nextButton.onclick = () => moveSlide(currentIndex + 1);
    
    /**
     * 切换轮播项的核心函数
     * @param {number} targetIndex - 目标轮播项的索引
     */
    function moveSlide(targetIndex) {
      // 1. 移除当前激活轮播项的active类
      slides[currentIndex].classList.toggle("active");
    
      // 2. 计算新的轮播项索引,实现循环逻辑
      // 使用三元运算符链式判断:
      // 如果目标索引 >= 总数,则回到第一个 (0)
      // 否则,如果目标索引 < 0,则回到最后一个 (totalSlides - 1)
      // 否则,使用目标索引
      targetIndex = targetIndex >= totalSlides ? 0 : 
                    targetIndex < 0 ? totalSlides - 1 : 
                    targetIndex;
    
      // 3. 将active类添加到新的轮播项
      slides[targetIndex].classList.toggle("active");
    
      // 4. 更新当前索引
      currentIndex = targetIndex;
    }

    JavaScript 关键点:

    phpscup轻量级cms系统1.1 beta GBK
    phpscup轻量级cms系统1.1 beta GBK

    PHPSCUP是一套追求简洁易用很务实的系统!PHPSCUP能满足大多数的初级企业网站用户。系统内置企业简介模块、新闻模块、产品模块、人才模块、在线留言模块、单篇文章模块、友情链接模块、单篇文章模块、图片轮播模块、下载模块。遵循SEO标准,通过模板或者定制为企业提供专业的营销型网站,该系统采用PHP+MySQL组合开发,具备安全、高效、稳定等基本特性。主要功能特色体现在:权限分配:权限分配功能非常

    下载
    • 元素选择与初始化: 使用 document.querySelectorAll('.slide') 获取所有轮播项,并使用扩展运算符 ... 将其转换为数组,方便索引访问。currentIndex 记录当前可见图片的索引,初始为0。
    • 事件监听: 为“上一张”和“下一张”按钮分别绑定 onclick 事件,当点击时调用 moveSlide 函数,并传入相应的目标索引。
    • moveSlide 函数:
      • 移除旧的 active 类: slides[currentIndex].classList.toggle("active") 会移除当前可见图片的 active 类,使其隐藏。
      • 循环索引计算: 这是实现循环轮播的核心。
        targetIndex = targetIndex >= totalSlides ? 0 : 
                      targetIndex < 0 ? totalSlides - 1 : 
                      targetIndex;

        这个链式三元运算符优雅地处理了三种情况:

        1. 如果 targetIndex 大于或等于 totalSlides(即尝试从最后一张向后切换),则将 targetIndex 重置为 0(第一张)。
        2. 如果 targetIndex 小于 0(即尝试从第一张向前切换),则将 targetIndex 设置为 totalSlides - 1(最后一张)。
        3. 否则,targetIndex 保持不变。
      • 添加新的 active 类: slides[targetIndex].classList.toggle("active") 为计算出的新目标图片添加 active 类,使其可见。
      • 更新 currentIndex: 将 currentIndex 更新为新的 targetIndex,以便下次切换时从正确的位置开始。

    5. 完整代码示例

    将上述 HTML、CSS 和 JavaScript 代码分别保存为 index.html、style.css 和 script.js,并确保它们在同一目录下。

    index.html

    
    
    
        
        
        JavaScript 循环图片轮播
        
    
    
        
    1
    2
    3
    4

    style.css

    html {
      font: 300 3vmin/1 Consolas;
    }
    
    body {
      display: flex;
      justify-content: center;
      align-items: center;
      min-height: 100vh;
      margin: 0;
      background-color: #f0f0f0;
    }
    
    main {
      display: flex;
      justify-content: center;
      align-items: center;
      position: relative;
      max-width: max-content;
    }
    
    .slides {
      display: flex;
      justify-content: center;
      align-items: center;
      position: relative;
      width: 420px;
      height: 400px;
      overflow: hidden;
    }
    
    .slide {
      display: grid;
      place-items: center;
      position: absolute;
      top: 50%;
      left: 50%;
      width: 400px;
      height: 350px;
      border-radius: 20px;
      font-size: 50px;
      font-weight: 600;
      box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
      visibility: hidden;
      transform: translate(-50%, -50%);
      transition: visibility 0.3s ease-in-out;
    }
    
    .active {
      visibility: visible;
    }
    
    .slide:first-of-type {
      background-color: #F7EC09;
    }
    
    .slide:nth-of-type(2) {
      background-color: #3EC70B;
    }
    
    .slide:nth-of-type(3) {
      background-color: #3B44F6;
    }
    
    .slide:nth-of-type(4) {
      background-color: #A149FA;
    }
    
    .ctrl {
      display: flex;
      justify-content: space-between;
      position: absolute;
      top: 45%;
      left: 50%;
      width: 120%;
      transform: translate(-50%, -50%);
      padding: 0 20px;
      box-sizing: border-box;
    }
    
    .next,
    .prev {
      border: none;
      font-size: 100px;
      font-weight: 700;
      background: none;
      cursor: pointer;
      color: #333;
      opacity: 0.7;
      transition: opacity 0.2s ease;
    }
    
    .next:hover,
    .prev:hover {
      opacity: 1;
    }

    script.js

    const prevButton = document.querySelector('.prev');
    const nextButton = document.querySelector('.next');
    
    const slides = [...document.querySelectorAll('.slide')];
    const totalSlides = slides.length;
    
    let currentIndex = 0;
    
    prevButton.onclick = () => moveSlide(currentIndex - 1);
    nextButton.onclick = () => moveSlide(currentIndex + 1);
    
    function moveSlide(targetIndex) {
      slides[currentIndex].classList.toggle("active");
    
      targetIndex = targetIndex >= totalSlides ? 0 : 
                    targetIndex < 0 ? totalSlides - 1 : 
                    targetIndex;
    
      slides[targetIndex].classList.toggle("active");
      currentIndex = targetIndex;
    }

    6. 注意事项与扩展

    • 图片内容: 本教程使用简单的数字作为轮播项内容。在实际应用中,您可以将 div.slide 替换为包含 使用JavaScript数组实现循环图片轮播教程 标签或其他复杂内容的结构。
    • 动画效果: 当前轮播切换是瞬间完成的(visibility 属性的过渡效果相对简单)。如果需要更平滑的滑动或淡入淡出动画,可以结合 opacity 和 transform 属性,并使用 transition 或 JavaScript 动画库来实现。
    • 指示器(Dots): 可以添加一组小圆点作为轮播指示器,每个圆点代表一张图片,并能点击跳转到对应图片。
    • 自动播放: 可以使用 setInterval 函数实现轮播的自动播放功能,并在用户交互时暂停。
    • 响应式设计 确保轮播组件在不同屏幕尺寸下都能良好显示。
    • 无障碍性(Accessibility): 为按钮添加 aria-label 属性,为图片添加 alt 文本,以提升无障碍性。

    7. 总结

    通过本教程,您学习了如何从零开始构建一个具备循环功能的图片轮播组件。核心在于理解并实现索引的循环计算逻辑,使得轮播在到达首尾时能够平滑地跳转到另一端。结合 HTML 的结构、CSS 的样式以及 JavaScript 的交互逻辑,您可以创建出功能强大且用户友好的网页轮播效果。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

557

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

394

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

754

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

478

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

454

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1031

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

658

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 21.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号