JavaScript纯手工实现轮播图(无缝切换)效果

JS来实现轮播图(走马灯)可左右切换图片,鼠标移入会停止轮播 效果一: 会自动进行轮播,当鼠标进入轮播图区域会停止轮播,点击左右箭头可以向前、向后进行切换图片 效果二: 这种效果比第一种效果简单,只要删除一些代码和修改一些样式即可。 实现原理 轮播图整体是放在ul里的,li里存放img图片(轮播的图片) <ul> <li> <img> </li> </ul> 给li元素进行绝对定位,且给每个li一个z-index值(堆叠数值,可以理解... 阅读详情

一、需求

        - 鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮

        - 点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮同理

        - 图片播放的同时,下面的小圆圈模块跟随一起变化

        - 点击小圆圈,可以播放相应图片

        - 鼠标不经过轮播图,轮播图也会自动播放图片

        - 鼠标经过,轮播图模块,自动播放停止

        - 实现无缝切换效果

二、搭建结构

1、HTML部分

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>轮播图结构</title>
    <link rel="stylesheet" href="./css/index.css">
    <script src="./js/animation.js"></script>
    <script src="./js/轮播图(ES6).js"></script>
  </head>
  <body>
    <div id="outer">
      <!-- 图片部分 -->
      <ul class="imgList">
        <li>
          <a href="#"><img src="./img/1.jpg" alt="" /></a>
        </li>
        <li>
          <a href="#"><img src="./img/2.jpg" alt="" /></a>
        </li>
        <li>
          <a href="#"><img src="./img/3.jpg" alt="" /></a>
        </li>
        <li>
          <a href="#"><img src="./img/4.jpg" alt="" /></a>
        </li>
      </ul>
      <!-- 导航点  class="active"-->
      <div class="dot">
        <!-- <a href="#" ></a>
        <a href="#"></a>
        <a href="#"></a>
        <a href="#"></a> -->
      </div>
      <!-- 左右导航 -->
      <ol class="prevNext">
        <li class="prev">
          <a href="javascript:;"> &lt;</a>
        </li>
        <li class="next">
          <a href="javascript:;">&gt;</a>
        </li>
      </ol>
    </div>
  </body>
</html>

三、CSS代码

* {
 padding: 0;
 margin: 0;
 list-style: none;
 text-decoration: none;
}
#outer {
  width: 590px;
  height: 470px;
  border: 10px solid red;
  margin: 50px auto;
  position: relative;
  overflow: hidden;
}
#outer > ul {
  width: 600%;
  position: absolute;
  left: 0;
  top: 0;
}
#outer > ul > li {
   float: left;
 }
.dot {
   position: absolute;
   bottom: 30px;
   left: 50%;
   transform: translate(-50%, -50%);
}
.dot > a {
  display: inline-block;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background-color: #999;
  margin: 0 5px;
}
.active,
.dot > a:hover {
  background-color: orange !important;
}
.prev,
.next {
   width: 40px;
   height: 40px;
   background-color: rgba(0, 0, 0, 0.4);
   text-align: center;
   position: absolute;
   font-size: 30px;
   color: #999;
   /* 隐藏左右按钮 */
   display: none;
}
.prev > a,
.next > a {
  color: #fff;
}
.prev {
   left: 10px;
   top: 42%;
}
.next {
   right: 10px;
   top: 42%;
}

四、JS部分代码

这部分代码可以采用ES5写法,也可以采用ES6写法,这两者可以相互切换,本文就采用ES6写法

<script>
window.addEventListener('load', function () {
  let that;
  class swiper {
    constructor() {
      that = this;
      this.imgList = document.querySelector('.imgList');
      this.dotList = document.querySelector('.dot');
      //获取图片的大小
      this.imgWidth = this.imgList.children[0].offsetWidth;
      //获取左右导航按钮
      this.leftBtn = document.querySelector('.prev');
      this.rightBtn = document.querySelector('.next');
      this.outer = document.querySelector('#outer');
      this.num = 0;//图片索引
      this.currentdot = 0;//当前圆点索引
      this.timer = null;
      this.autoPlay();
      this.crrateDot();
      this.cloneImg();
      this.addevent()
    }
    addevent() {
      this.dotList.addEventListener('click', this.clickDot)
      this.dotList.addEventListener('click', this.clickDotchangeImg)
      // 鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮
      this.outer.addEventListener('mouseenter', this.showBtn)
      this.outer.addEventListener('mouseleave', this.hideBtn)
      //鼠标经过,轮播图模块,自动播放停止
      this.outer.addEventListener('mouseenter', this.outplay)
      this.outer.addEventListener('mouseleave', this.inplay)
      //点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮同理
      this.rightBtn.addEventListener('click', this.nextImg)
      this.leftBtn.addEventListener('click', this.prevImg)
    }
    //各种事件
    //创建小圆点
    crrateDot() {
      let imgNum = this.imgList.children.length;
      console.log(imgNum);
      for (let i = 0; i < imgNum; i++) {
        let str = "";
        str = `
          <a href="#" index="${i}"></a>
        `
        this.dotList.innerHTML += str;
      }

      // 默认给第一个圆点添加active类
      this.dotList.children[0].className = "active";
      console.log(this.dotList);
    }
    //点击小圆点颜色高亮并切换图片
    clickDot(e) {
      // 阻止默认行为
      e.preventDefault();
      // 颜色高亮
      console.log(e.target.nodeName)
      if (e.target.nodeName == 'A') {
        let dots = that.dotList.children;
        for (let i = 0; i < dots.length; i++) {
          dots[i].className = "";

        }
        e.target.className = "active";
      }


    }
    //切换图片
    clickDotchangeImg(e) {
      let index = e.target.getAttribute("index");
      console.log(index);
      animation(that.imgList, -index * that.imgWidth)
    }
    //鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮
    //出现左右按钮
    showBtn() {
      that.leftBtn.style.display = "block";
      that.rightBtn.style.display = "block";
    }
    // x隐藏左右按钮
    hideBtn() {
      that.leftBtn.style.display = "none";
      that.rightBtn.style.display = "none";
    }
    //点击右侧按钮一次,图片往左播放一张
    nextImg() {
      if (that.num < that.imgList.children.length - 1) {
        that.num++;
      } else {
        that.imgList.style.left = 0;
        that.num = 1;
      }
      animation(that.imgList, -that.num * that.imgWidth);
      let dotsLength = that.dotList.children.length;
      if (that.currentdot < dotsLength - 1) {
        that.currentdot++;

      } else {
        that.currentdot = 0;
      }
      that.changeColor()
    }
    //点击左侧按钮一次,图片往右播放一张
    prevImg() {
      if (that.num > 0) {
        that.num--;
      } else {
        that.imgList.style.left = -(that.imgList.children.length - 2) * that.imgWidth + 'px';
        that.num = that.imgList.children.length - 2;

      }
      animation(that.imgList, -that.num * that.imgWidth)

      let dotsLength = that.dotList.children.length;
      if (that.currentdot > 0) {
        that.currentdot--;

      } else {
        that.currentdot = that.dotList.children.length - 1;
      }

      that.changeColor()
    }
    //按钮点击小圆点颜色高亮,
    changeColor() {
      let dots = that.dotList.children;
      for (let i = 0; i < dots.length; i++) {
        dots[i].className = "";
      }
      dots[that.currentdot].className = "active";
    }
    //轮播图自动播放
    autoPlay() {
      that.timer = setInterval(function () {
        that.nextImg();
      }, 1000)
    }
    //鼠标经过,轮播图模块,自动播放停止
    outplay() {
      clearInterval(that.timer);
    }
    //input输入框内容变化,轮播图自动播放
    inplay() {
      that.autoPlay();
    }
    //实现无缝滚动效果
    cloneImg() {
      let fistimg = that.imgList.children[0].cloneNode(true);
      console.log(fistimg);
      that.imgList.appendChild(fistimg);

    }
  }
  new swiper()
})
</script>

五、js动画

这里为了切换效果更丝滑,封装了一个JS动画函数,只需要引入,在需要的地方直接调用就可以,比如上面JS代码里的 animation(that.imgList, -that.num * that.imgWidth);就是直接调用了动画函数,把下方的代码直接另存为一个js文件引入即可。

function animation(obj, target, callback) {
  clearInterval(obj.time);
  obj.time = setInterval(function () {
    var step = (target - obj.offsetLeft) / 10;
    step = step > 0 ? Math.ceil(step) : Math.floor(step);
    if (obj.offsetLeft == target) {
      clearInterval(obj.time);
      if (callback) {
        callback();
      }
    } else {
      obj.style.left = obj.offsetLeft + step + "px";
    }
  }, 15);
}

原生Js实现自动无缝轮播图 javascript实现自动无缝轮播图 1、实现原理 轮播图实现原理是用一个大盒子组容器,里面包含一个小盒子,小盒子用来移动,小盒子里装着要轮播的图片,图片水平排放,当小盒子移动的时候带动图片一起移动,要想实现无缝轮播,则要在最后放一张与第一张一摸一样的图片,当图片滚动到最后一张时,用户会感觉这是第一张,然后再跳到第一张,这样用户就不会感觉图片是跳过去的,实现无缝轮播 2、实现效果 (图片上传有大小限制,这里就展示一部分。。。) 3、代码展示 3.1 网页结构布局(html代码) <!DOCTYPE 阅读详情

相关推荐

JavaScript实现京东轮播图效果——自动轮播,左右按钮切换图片,小圆圈跟随图片变化,点击小圆圈可跳转图片,无缝循环播放

JavaScript实现京东轮播图效果——自动轮播,左右按钮切换图片,小圆圈跟随图片变化,点击小圆圈可跳转图片,无缝循环播放 静态效果图如下: CSS部分 *{ margin: 0; padding: 0; } body{ user-select: none; } .banner{ position: relative;

曲鬼鬼的博客 3495

js实现左右切换轮播图效果

js实现图片跑马灯式轮播效果,可点击切换上下张,下方有定位圆点随图片切换激活状态

qq_40261601的博客 5228

使用 HTML + CSS + JavaScript 实现无缝滚动轮播图

JavaScript 学习经典案例:使用 HTML + CSS + JavaScript 实现无缝滚动轮播图

Allen- 8278

基于html+js实现轮播图(自动轮播、左右按钮、小圆点点击及切换图片)

基于html+js实现轮播图(自动轮播、左右按钮、小圆点点击及切换图片)

未休的博客 3万+

PostGIS 小白入门详细指南

PostGIS 是 PostgreSQL 的一个扩展,它将 PostgreSQL 转变为一个功能强大的空间数据库,使其能够存储、查询和分析地理空间数据。PostGIS 遵循开放地理空间联盟(OGC)的标准,支持各种空间数据类型和操作,如点、线、多边形、缓冲区、空间连接等。存储各种空间数据类型(如几何类型和地理类型)空间索引,提高查询性能丰富的空间函数和操作支持投影和坐标系统转换城市规划与管理环境监测与分析物流与运输优化地图制作与可视化位置服务与导航。

落魄书生的职业学习生涯 1万+

【七】Hadoop3.3.4基于ubuntu24的分布式集群安装

本次安装实验基于苹果m2芯片的mac系统,使用vmware fusion搭建三台ubuntu24分布式虚拟机,确保在三台机器上安装了Java jdk8,并配置了免密码登录,网络互通,防火墙关闭,授时服务器已经同步。访问apche官网源,下载3.3.4版本,我们用二进制通用版即可,因为hadoop运行在java环境,跨平台性使得无需编译arm架构版本。至此,Hadoop的安装完成,包括hdfs文件存储系统,mapreduce计算框架,yarn资源管理系统均能正常、稳定使用。

qq_31412425的博客 2161

JS实现无缝切换轮播图(自动+手动)

说起轮播图,大家应该都不陌生,各大购物网站和面试题里都能看到它的身影。 实现上也并不困难,而写这篇文章是想整理一下自己心血来潮写的代码,以及实现过程中的一些思考,大家也可以顺便复习巩固一下。 今天给大家带来的是过渡动画等效果都由JS实现的无缝轮播图。CSS实现轮播图等以后再写。

清风的博客 5万+

从充电管理芯片里‘偷师’:拆解一个PMOS双向开关电路,搞定你的固态继电器需求

本文深入解析了PMOS双向开关电路在固态继电器应用中的设计要点,重点探讨了防电流倒灌和高侧双向开关的实现技巧。通过拆解充电管理芯片中的PMOS背靠背结构,工程师可以构建高效可靠的固态开关方案,适用于智能硬件和电池管理系统。文章还提供了关键参数选择、电路优化建议及实测数据对比,助力解决电源防反接等工程难题。

weixin_33698043的博客 482

css图片滑动切换图_JS实现无缝切换轮播图(自动+手动)

一、背景说起轮播图,大家应该都不陌生,各大购物网站和面试题里都能看到它的身影。 实现上也并不困难,而写这篇文章是想整理一下自己心血来潮写的代码,以及实现过程中的一些思考,大家也可以顺便复习巩固一下。 今天给大家带来的是过渡动画等效果都由JS实现的无缝轮播图。CSS实现轮播图等以后再写。二、概述(一) 实现的效果①自动播放 ②鼠标停留时停止播放,并显示左右切换按钮③点击左右按钮或者圆形下标时可手动切...

weixin_39908462的博客 1万+

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 280

DolphinScheduler工作流中ChunJun任务保存失败的深度解析与实战修复

本文深度解析了在DolphinScheduler工作流中创建ChunJun任务时遭遇“parameter invalid”保存失败的普遍问题。其根源在于前端表单的`customConfig`参数默认值与后端校验逻辑不匹配。文章提供了两种实战修复方案:一是修改前端源码并重新编译,二是热更新已部署的JS文件,并对比了其适用场景与风险,帮助用户彻底解决此集成障碍。

weixin_29010003的博客 397

纯 CSS 实现轮播图(自动切换、无缝衔接、小圆点切换)

纯 css 实现一个简单的轮播图

qq_53569667的博客 2万+

手把手安装GNN必备库 —— pytorch_geometric

PyG全称是Pytorch Geometric,它是一个基于Pytorch构建的库,可以帮助用户快速构建和训练自己的图神经网络模型。PyG中实现了很多先进(state of the art)的GNN模块,例如GCN、GraphSage、GAT、SGC、GIN等等。此外,PyG中还包含了大量的benchmark图数据集、丰富的图数据操作方法、支持多GPU。

m0_51339444的博客 2380

HTML+CSS+JavaScript实现轮播图效果

轮播图的效果有很多种,做起来也挺有意思。本文所做的轮播图没有添加动画效果,适合不会动画的初学者参考。如果对动画感兴趣,之后我也会分享添加了动画效果的轮播图。

apple_54470279的博客 2万+

C++ getline函数详解与示例代码

每次调用函数时,会读取一行文本,并将其存储在字符串对象中。在循环中,我们检查读取到的文本是否为空行,如果是则跳出循环,否则输出读取到的文本。这个函数在处理用户输入、文件读取等场景中非常有用,希望能对您的C++编程有所帮助。函数是一个常用的字符串输入函数,可以用于从输入流中读取一行文本。首先,我们输出提示信息,要求用户输入一行文本。函数会等待用户输入,并将输入的文本存储在。函数从输入流中读取一行文本,并将其存储在字符串对象。这样,当用户输入制表符时,函数会停止读取。函数的用法,并提供相应的示例代码。

LogicGuruX的博客 828

月薪30k+的工业视觉,必备Java+YOLO技能(工业级落地全拆解)

30k+工业视觉岗的核心不是算法调参,而是用Java把YOLO落地到工业场景的能力——稳运行、能对接、可管理是高薪的核心壁垒;必备技能分五层:模型工业级适配、Java推理核心、SpringBoot后端、工业部署运维、场景适配,每层都要练到“能落地、能讲清、能避坑”;学习路径的核心是“实战驱动”:不要只学理论,从一个完整的工业项目(如锂电缺陷检测)入手,练完就能对标高薪岗。

2601_94871597的博客 525

vue实现轮播图(滚动切换,无缝切换,自动切换,循环无回滚,暂停滚动等效果)

vue实现轮播图 喜欢的小伙伴可以和我互相关注哦 有任何疑问都可以私聊我 互相学习,共同进步 话不多说,先看效果 滚动切换、无缝切换、循环滚动 鼠标进入暂停自动滚动和离开继续自动滚动 主要代码: HTML结构 <div class="swiper"> <div class="moveL" @click="switchImg(-1)"><&...

qq_42586895的博客 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JS实现轮播图点击切换、按钮切换功能

JS实现轮播图点击切换、按钮切换功能前言轮播图案例总结 前言 轮播图的案例非常经典,写法也非常多,我在写一个自己用的比较多的写法,帮助大家理解,在网页的设计中,可以直接拿去用(记得换图片路径哦!),仅供参考学习。 轮播图案例 代码如下(示例): <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title>

zxh996的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

原生JS无缝轮播图(左右切换、导航跟随)

原生JS无缝轮播图(左右切换、导航图标) 功能: 1、实现轮播图的左右无缝切换 2、实现导航图标的跟随显示、点击切换 3、使用定时器进行无缝轮播 css部分 <style> /* 轮播图容器 */ #carousel{ width: 800px; height: 400px; bo...

shi__Yu的博客 5483

JavaScript的es6写法实现无缝切换的轮播图

/padding;margin;list-style;;height;border;margin;position;overflow;width;width;position;left;top;*/float;bottom;left;width;height;;;margin;.active,!important;.prev,

奋斗的小前端 1038

用js实现点击切换+自动切换的轮播图

用js实现点击切换+自动切换的轮播图 之前博主写过一篇用css实现轮播图的文章,可以看到用css实现的轮播图也能实现我们所需要的功能。那么这些功能用js该如何实现呢?我们一起来看下吧! (ps:博主在用js写轮播图的过程中,在网上查阅了很多篇文章,但是没有一篇是博主能彻底理解的[笨蛋QAQ],所以这篇博客用来帮助像博主一样没有头绪,看不懂网上部分教程的伙伴)。 首先我们要明白轮播图的滑动原理,假设我们有装着3张图片的大盒子pic,那么我们可以采用定位或者浮动让这3张图片横向排成一排,那么大家想一想我们是不是

Free_Ya的博客 7003

用JS实现图片切换、定时器、轮播图

一. 图片切换 实现功能: 当点击“下一页”时,跳转到下一张图片; 当点击“上一页”时,跳转到上一张照片; 显示当前页/总页数,如:2/6。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片切换</title> <style t...

DDL_lalala的博客 9063

vue实现轮播图(跑马灯、无缝滚动、无限切换效果)

vue实现轮播图(跑马灯、无缝滚动、无限切换、淡入淡出等轮播图效果),简简单单,复制粘贴,开箱即用,不依赖第三方插件、组件。

m0_59224033的博客 3万+

JQuery 基础案例(3)—— jQuery实现轮播图无缝(无回滚)滚动切换效果

轮播图无缝滚动切换原理 基本框架 &amp;lt;div class=&quot;slide&quot;&amp;gt; &amp;lt;!-- 导航点 --&amp;gt; &amp;lt;ul class=&quot;slide-nav&quot;&amp;gt; &amp;lt;li class=&quot;active&quot;&amp;gt;&am

weixin_39141044的博客 1万+

纯JS实现左右滑动轮播图

效果图 轮播图的功能 轮播图需要实现左右无缝切换 需要实现跳转(放在圆点显示对应图片) 当前位置的小圆点样式需要突出

qq_45670042的博客 9582

html 轮播图左右切换代码,js实现左右轮播图

本文实例为大家分享了js实现左右轮播图的具体代码,供大家参考,具体内容如下我的轮播图功能有:自动播放、点击焦点切换和点击左右按钮切换效果图:自动轮播点击焦点切换点击左右按钮切换注意:本文用带背景颜色的li标签指代图片,有需要的话可以将图片插入li标签内思路:基础布局和css样式(1) 给盛放要轮播的图片的盒子绝对定位js中的代码(2) 复制第一张图片放在盒子最后,复制最后一张图片放在盒子最前,以保...

weixin_34138397的博客 9062
上一篇: JavaScript对象补充
下一篇: JavaScript购物车案例
@Cedric
博客等级 码龄5年 263粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值