js实现无缝轮播图

yizhihongxing

下面是“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提交表单的方式 (Using JavaScript Submit Form)

    下面是使用JavaScript提交表单的详细攻略: 1. 背景知识 表单是网页中非常常见的一种交互方式,用户在表单中填写信息后,需要将表单提交到后台。本文将介绍如何使用JavaScript提交表单。 2. JavaScript提交表单的方式 2.1 使用表单提交按钮 通常情况下,表单中会有一个提交按钮,当用户点击提交按钮时,表单会自动提交。代码示例: &lt…

    JavaScript 2023年6月10日
    00
  • JavaScript框架(iframe)操作总结

    JavaScript框架(iframe)操作总结 什么是 iframe? iframe 是 HTML 标签之一,用于在网页中嵌入另一个网页或者文档。它可以允许开发者在其网页中嵌入其他页面,或将整个页面作为框架嵌入到网页中。这个功能通常用于在网站页面中添加广告、视频或其他内容。 实现 iframe 的方式 下面是实现 iframe 的方式: HTML实现: &…

    JavaScript 2023年6月11日
    00
  • python实现斗地主分牌洗牌

    让我来为你详细讲解如何使用 Python 实现斗地主的牌局分配和洗牌。 准备工作 为了实现斗地主案例,你需要安装 Python 并且了解 Python 基础语法的使用。此外还需用到 Python 自带的 random 模块。 实现分配牌 首先我们需要生成一副有 54 张牌的扑克牌,并将其打乱顺序。在 Python 中,可以通过创建一个包含所有扑克牌的列表来实…

    JavaScript 2023年5月28日
    00
  • Javascript中获取对象的原型对象的方法小结

    获取对象的原型对象是JavaScript中常见的操作,下面介绍一些获取对象的原型对象的方法。 方法一:使用Object.getPrototypeOf Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)。 示例代码: const obj = {}; const proto = Object.getP…

    JavaScript 2023年5月27日
    00
  • JavaScript内置日期、时间格式化时间实例代码

    让我来为您详细讲解一下 “JavaScript内置日期、时间格式化时间实例代码” 的完整攻略。 什么是日期、时间格式化? 格式化是指将一个变量的值以一定的格式输出。在 JavaScript 中,我们可以使用内置的 Date() 对象和相关方法进行日期、时间格式化。 如何使用内置日期、时间格式化实例代码? 获取当前时间 获取当前时间的方式有两种,分别是使用 n…

    JavaScript 2023年5月27日
    00
  • html中使用javascript调用本地程序(exe、doc等)实现代码

    要实现在HTML页面中使用JavaScript调用本地程序(如.exe、.doc等)需要使用浏览器提供的“ActiveXObject”对象,这个对象可以在IE浏览器中使用,其它浏览器则需要使用不同的方式实现。下面我们就来详细讲解如何在HTML中使用JavaScript调用本地程序的完整攻略。 步骤1:创建一个ActiveXObject 在JavaScript…

    JavaScript 2023年5月27日
    00
  • js实现创建删除html元素小结

    下面就为你详细讲解 js 实现创建删除 HTML 元素的完整攻略。 1. 使用 createElement() 函数创建 HTML 元素 要创建新的 HTML 元素,需要使用 JavaScript 中的 createElement() 函数。该函数接收一个参数,指定新创建元素的类型。可以根据需要给新元素设置属性和内容,最后将其添加到文档中。 例如,下面的 J…

    JavaScript 2023年6月10日
    00
  • JS中call apply bind函数手写实现demo

    下面是关于“JS中call apply bind函数手写实现demo”的攻略: 理解call、apply、bind函数 在手写这三个函数的过程中,我们必须先清楚地理解这三个函数的作用: call函数:调用一个函数,将一个对象作为第一个参数,以及多个参数传入该函数。 apply函数:调用一个函数,将一个对象作为第一个参数,以及一个参数数组传入该函数。 bind…

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