JavaScript 实现旋转木马轮播图的核心逻辑与代码解析

作者:拾光

时间:2026-10-23

浏览:296

本文详细解析使用原生 JavaScript 实现旋转木马轮播图的方法。核心在于通过固定五种图片位置信息的数组进行布局,利用 push、pop、shift、unshift 等数组操作方法重新排序数据,进而驱动界面重新布局。文章提供了完整的 HTML、CSS 及 JS 代码示例,展示如何通过点击左右按钮触发数据变化并更新视图。

文章目录

旋转木马轮播图实现概述

本文分享了一个使用 JavaScript 实现的旋转木马轮播图实例,供读者参考学习。

实现该效果主要涉及以下核心知识点:

核心逻辑与数组操作

首先是旋转木马的核心思想:

第一,定义一个包含五种图片位置信息的 JSON 数组(jsonArr)用于初始布局。第二,当用户点击“上一张”或“下一张”按钮时,程序会对 jsonArr 进行重新排序,排序完成后立即根据新的数据重新对界面进行布局渲染。

其次,采用数据驱动界面的模式,即数据的任何改变都会自动引发界面的相应更新。

第三,需要掌握数组的四种基本操作方法:

① push:该方法用于向数组末尾添加一个或多个元素,并返回添加后的新数组长度。② pop:该方法用于删除并返回数组的最后一个元素。③ shift:该方法用于删除并返回数组的第一个元素。④ unshift:该方法用于向数组开头添加一个或多个元素,并返回添加后的新数组长度。

代码中引入了辅助工具库以简化开发。

以下是该轮播图的运行效果展示。

旋转木马轮播图实现概述

具体实现代码如下:

完整代码示例


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title></title>
 <style>
  * {
   margin: 0;
   padding: 0;
   border: none;
   list-style: none;
  }

  img {
   vertical-align: top;
  }

  body {
   background-color: #000;
  }

  #slider {
   width: 1200px;
   height: 460px;
   margin: 100px auto;
   position: relative;
   /*background-color: red;*/
  }

  #slider li {
   position: absolute;
   left: 200px;
   top: 0;
  }

  #slider li img {
   width: 100%;
   height: 100%;
  }

  .slider_ctl_prev, .slider_ctl_next {
   width: 76px;
   height: 112px;
   position: absolute;
   top: 50%;
   margin-top: -56px;
   z-index: 99;
  }

  #slider_ctl {
   opacity: 0;
  }

  .slider_ctl_prev {
   background: url("images/prev.png") no-repeat;
   left: 0;
  }

  .slider_ctl_next {
   background: url("images/next.png") no-repeat;
   right: 0;
  }
 </style>
</head>
<body>
<div id="slider">
 <ul id="slider_main">
  <li><img src="images/slidepic1.jpg" alt=""></li>
  <li><img src="images/slidepic2.jpg" alt=""></li>
  <li><img src="images/slidepic3.jpg" alt=""></li>
  <li><img src="images/slidepic4.jpg" alt=""></li>
  <li><img src="images/slidepic5.jpg" alt=""></li>
 </ul>
 <div id="slider_ctl">
  <span class="slider_ctl_prev"></span>
  <span class="slider_ctl_next"></span>
 </div>
</div>
<script src="../00MyTools/MyTools.js"></script>
<script>
 window.addEventListener('load',function (ev) {
  // 1. 获取需要标签
  var slider = myTool.$('slider');
  var sliderMain = myTool.$('slider_main');
  var allLis = sliderMain.children;
  var sliderCtl = myTool.$('slider_ctl');

  // 2. 位置信息
  var jsonArr = [
   {"width":"400", "top":"20", "left":"50", "opacity":"0.2", "zIndex":"2"},
   {"width":"600", "top":"70", "left":"0", "opacity":"0.8", "zIndex":"3"},
   {"width":"800", "top":"100", "left":"200", "opacity":"1", "zIndex":"4"},
   {"width":"600", "top":"70", "left":"600", "opacity":"0.8", "zIndex":"3"},
   {"width":"400", "top":"20", "left":"750", "opacity":"0.2", "zIndex":"2"}
  ];
  // 将位置信息作用到图片上去
  for (var i = 0; i < jsonArr.length; i++) {
   myTool.slowMoving(allLis[i], jsonArr[i]);
  }
  // 3. 设置显示和隐藏
  slider.addEventListener('mouseover', function () {
   myTool.slowMoving(sliderCtl, {'opacity': 1});
  });

  slider.addEventListener('mouseout', function () {
   myTool.slowMoving(sliderCtl, {'opacity': 0});
  });

  // 4. 监听点击
  for (var j = 0; j < sliderCtl.children.length; j++) {
   var item = sliderCtl.children[j];
   item.addEventListener('click',function (evt) {
    if (this.className === 'slider_ctl_prev'){
     // 点击左边
     // 两种方式
     // 1. 改变数据影响标签 数据驱动界面
     // 2. 改变标签适应数据
     jsonArr.push(jsonArr.shift())
    }else{
     // 点击右边
     jsonArr.unshift(jsonArr.pop())
    }

    // 重新布局
    for (var i = 0; i < jsonArr.length; i++) {
     myTool.slowMoving(allLis[i], jsonArr[i]);
    }
   },false);
  }
 },false)
</script>
</body>
</html>

如需了解更多轮播图相关效果,可点击下方链接查阅更多专题内容。

JavaScript 图片轮播效果汇总

jQuery 图片轮播效果汇总

Bootstrap 轮播特效汇总

以上就是本文的全部内容,希望能为读者的学习提供有益帮助,欢迎大家继续支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章