js实现无缝轮播图

下面是“JS实现无缝轮播图”的完整攻略:

目录

  1. 需求分析
  2. HTML结构构建
  3. CSS样式定义
  4. JS实现无缝轮播图

1. 需求分析

在实现无缝轮播图前,我们需要先分析需求,包括:

  • 实现自动轮播效果
  • 点击箭头进行轮播切换
  • 延迟轮播时间,停留在当前轮播图上
  • 实现首尾轮播切换时无缝连接

2. HTML结构构建

在分析需求后,我们需要搭建html结构,基本代码如下:

<div class="carousel">
    <ul class="img-box">
        <li><img src="1.jpg" alt=""></li>
        <li><img src="2.jpg" alt=""></li>
        <li><img src="3.jpg" alt=""></li>
        <li><img src="4.jpg" alt=""></li>
        <li><img src="5.jpg" alt=""></li>
        <li><img src="6.jpg" alt=""></li>
    </ul>
    <ul class="btn-box">
        <li class="btn active"></li>
        <li class="btn"></li>
        <li class="btn"></li>
        <li class="btn"></li>
        <li class="btn"></li>
        <li class="btn"></li>
    </ul>
    <div class="arrow-box">
        <div class="left-arrow"><</div>
        <div class="right-arrow">></div>
    </div>
</div>

其中img-box用来呈现轮播图,btn-box用来显示当前轮播图位置,arrow-box用来存放箭头。

3. CSS样式定义

在html构建完成后,定义CSS样式使得页面结构排版合理,样式代码如下:

.carousel {
    position: relative;
    overflow: hidden;
    width: 600px;
    height: 400px;
    margin: 0 auto;
}
.img-box {
    position: relative;
    list-style: none;
    width: 600%;
    height: 400px;
    margin: 0;
    padding: 0;
    left: 0;
    transition: left 0.5s ease-in-out;
}
.img-box li {
    position: relative;
    float: left;
    width: 16.66667%;
    height: 400px;
}
.img-box li img {
    width: 100%;
    height: 100%;
}
.btn-box {
    position: absolute;
    bottom: 20px;
    left: 50%;
    transform: translateX(-50%);
    list-style: none;
    margin: 0;
    padding: 0;
    text-align: center;
}
.btn {
    position: relative;
    display: inline-block;
    width: 8px;
    height: 8px;
    margin: 0 5px;
    background: #ccc;
    border-radius: 50%;
    cursor: pointer;
}
.btn.active {
    background: #f40;
}
.arrow-box {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 35px;
    height: 60px;
    opacity: 0;
    transition: opacity 0.3s ease-in-out;
}
.arrow-box:hover {
    opacity: 1;
}
.left-arrow,
.right-arrow {
    position: absolute;
    top: 50%;
    margin-top: -15px;
    width: 16px;
    height: 30px;
    color: #fff;
    font-size: 20px;
    font-weight: bold;
    text-align: center;
    line-height: 30px;
    background: #000;
    cursor: pointer;
    z-index: 99;
}
.left-arrow {
    left: 0;
}
.right-arrow {
    right: 0;
}

4. JS实现无缝轮播图

在html和css都已经完成后,使用JS实现“无缝轮播”的功能。首先我们需要获取所有需要操作的元素。

let carousel = document.querySelector('.carousel');
let imgBox = document.querySelector('.img-box');
let imgList = document.querySelectorAll('.img-box li');
let btnList = document.querySelectorAll('.btn-box .btn');
let arrowBox = document.querySelector('.arrow-box');
let leftArrow = document.querySelector('.left-arrow');
let rightArrow = document.querySelector('.right-arrow');

获取到元素后,需要给每个位置按钮icon绑定点击事件,触发点击事件后会跳转到对应的位置。

for (let i = 0; i < btnList.length; i++) {
   btnList[i].onclick = function () {
      // 切换轮播图片位置
      imgBox.style.left = -i * imgList[0].offsetWidth + 'px';
      // 切换当前位置按钮的active类名
      for (let j = 0; j < btnList.length; j++) {
         btnList[j].classList.remove('active');
      }
      btnList[i].classList.add('active');
      // 获取当前显示的图片位置
      curIndex = i;
   }
}

接着,通过定时器自动轮播,切换图片位置。同时,在首尾轮播切换时,通过JS动态添加和删除节点,实现无缝连接效果。

// 设置定时器自动轮播
let timer = setInterval(() => {
   // 判断当前是否为最后一张图片,如果是则返回第一张图片
   if (curIndex === imgList.length - 1) {
      imgBox.appendChild(imgList[0].cloneNode(true));
      // 过渡效果结束后,删除clone的图片节点,保证轮播的正常性
      imgBox.addEventListener('transitionend', function () {
         imgBox.removeChild(imgList[imgList.length - 1]);
         // 过渡完毕后索引设为0
         curIndex = 0;
      }, false);
   } else {
      curIndex++;
   }
   // 根据当前位置的变化,切换轮播图
   imgBox.style.left = -curIndex * imgList[0].offsetWidth + 'px';
   // 切换当前位置按钮的active类名
   for (let j = 0; j < btnList.length; j++) {
      btnList[j].classList.remove('active');
   }
   btnList[curIndex].classList.add('active');
}, 2000);

完成以上JS代码,我们就实现了“JS实现无缝轮播图”的完整攻略。

示例演示

以下提供两个JS实现无缝轮播图的完整示例,可供参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现无缝轮播图 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript 中的无穷数(Infinity)详解

    那么首先需要明确的是,在 JavaScript 中,Infinity 是指表示正无穷大的数字常量。它比任何数都大,包括自身。同时,JavaScript 也提供了一个负无穷大的常量,即-Infinity。下面,我将会详细讲解 Infinity 在 JavaScript 中的应用及示例。 什么是 Infinity? Infinity 是一个 JavaScript…

    JavaScript 2023年5月27日
    00
  • JS调用安卓手机摄像头扫描二维码

    JS调用安卓手机摄像头扫描二维码的完整攻略如下: 1. 引入zxing库 首先,需要引入zxing库,zxing是一个开源的二维码扫描库,由于JavaScript是无法直接访问手机底层的,需要借助安卓的WebView技术,我们可以使用WebView加载一个包含zxing库的html页面,这样就可以在WebView中调用zxing库实现扫描二维码的功能。 2.…

    JavaScript 2023年6月11日
    00
  • js Object2String方便查看js对象内容

    这里是关于如何使用 JavaScript 的 Object2String 来方便查看 JavaScript 对象内容的详细攻略: 安装: Object2String 是当下比较常用的一个 npm 模块,并且可以通过命令行快速安装: npm install obj2str 用法: 在代码中,我们可以使用 require 或者 import 的方式引入 obj2…

    JavaScript 2023年5月27日
    00
  • JavaScript获取当前运行脚本文件所在目录的方法

    JavaScript获取当前运行脚本文件所在目录的方法可以通过以下两种方式来实现: 方法一:使用document.currentScript获取 可以使用 document.currentScript 获取当前运行脚本的元素,进而通过 src 属性获取运行脚本所在的路径。 示例代码如下: const scriptUrl = document.currentS…

    JavaScript 2023年5月27日
    00
  • JS自定义函数实现时间戳转换成date的方法示例

    下面是关于“JS自定义函数实现时间戳转换成date的方法示例”的完整攻略: 1. 理解时间戳和Date对象 在开始编写时间戳转换成date的函数之前,我们需要先了解什么是时间戳和Date对象。时间戳是指从1970年1月1日00:00:00(UTC/GMT的午夜)开始所经过的秒数,它是一串数字,通常是10位或13位;而Date对象是JavaScript的日期对…

    JavaScript 2023年5月27日
    00
  • JS简单实现DIV相对于浏览器固定位置不变的方法

    下面是JS简单实现DIV相对于浏览器固定位置不变的方法的完整攻略: 步骤一:设置CSS样式 首先,我们需要在HTML页面中定义一个div,然后为该div设置CSS样式,使其固定在浏览器的某个位置。例如,我们可以设置该div的position属性为”fixed”,然后指定它距离浏览器顶部的距离为0px,即可使之固定在浏览器顶部。 HTML代码如下: <d…

    JavaScript 2023年6月10日
    00
  • 判断js数据类型的函数实例详解

    判断js数据类型的函数实例详解 背景 在JavaScript中,数据类型多种多样,包括了数字、字符串、布尔值、数组、对象、函数等。而有些时候,需要用JavaScript代码来对不同的数据类型做不同的操作。因此,了解如何判断这些数据类型就显得非常重要了。本文将详细讲解如何通过函数来判断JavaScript中不同数据类型。 判断数据类型的函数 typeof函数 …

    JavaScript 2023年5月27日
    00
  • Javscript调用iframe框架页面中函数的方法

    当一个网页中包含有一个或多个iframe时,如果我们想要在外部JS文件中调用这个iframe中的函数,我们可以通过以下两种方法来实现。 方法一:使用window.frames[index].functionName() 使用window.frames可以获取网页中所有的iframe,它返回的是一个加了编号的数组,每个数组元素代表一个iframe,编号从0开始…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部