JS原生实现轮播图

用原生js实现轮播图 用原生js实现最简单的轮播图效果,实现图片切换。 阅读详情

轮播图

主要思想就是:

在大的容器里,装着一个很长的表,表是容器宽度的整数倍。

然后通过更改列表样式里的left属性来实现左右滑动。

本文旨在控制滑动五张图片,但在html中使用了七张图片,第一张和最后一张是有重复的,至于原因会在下面解释。

在这里插入图片描述

通过给容器设定overflow:hidden属性来保证只显示容器视口大小的一张图片。

<body>
  <div id="container">   /*容器*/
    <div id="wrap" style="left: -400px;">    /*存放图片的列表*/
      <div class="item item5">l5</div>
      <div class="item item1">1</div>
      <div class="item item2">2</div>
      <div class="item item3">3</div>
      <div class="item item4">4</div>
      <div class="item item5">5</div>
      <div class="item item1">r1</div>
    </div>
  </div>
  <div id="key">      /*设置按钮*/     
    <div id="list">			/*点击小圆圈切换到固定图片*/
      <div class="btn1 btnNum">1</div>
      <div class="btn2 btnNum">2</div>
      <div class="btn3 btnNum">3</div>
      <div class="btn4 btnNum">4</div>
      <div class="btn5 btnNum">5</div>
    </div>
    <div id="btn">          /*向左切换和向右切换的按钮*/
      <button class="left">←</button>
      <button class="right">→</button>
    </div>
  </div>
</body>

CSS:

可以给wrap列表设置flex属性,让图片在一行显示。其他布局可以按自己需求来做。

注意在定义id="wrap"d的节点中设置了内联样式left。因为在切换图片的时候我用到的是left属性,而如果不设置left的话,在DOM设置style时是找不到left属性的。

<style>
    #container {
      width: 400px;
      height: 300px;
      border: 8px rgb(8, 8, 8) solid;
      margin: 0 auto;
      margin-top: 150px;
      overflow: hidden;
      position: relative;
    }
    #wrap {
      width: 2800px;
      height: 300px;
      display: flex;
      position: relative;
    }
    .item {
      flex: 1;
      width: 400px;
      height: 300px;
    }
    .item1 {
      background-color: rosybrown;
    }
    .item2 {
      background-color: rgb(12, 226, 37);
    }
    .item3 {
      background-color: rgb(212, 221, 29);
    }
    .item4 {
      background-color: rgb(61, 27, 182);
    }
    .item5 {
      background-color: rgb(221, 23, 145);
    }
    #key {
      width: 400px;
      height: 300px;
      margin: 0 auto;
    }
    #list {
      width: 400px;
      height: 40px;
      display: flex;
      justify-content: center;
    }
    #list div {
      margin-top: 10px;
      margin-left: 10px;
      width: 20px;
      height: 20px;
      background-color: rgb(13, 162, 221);
      text-align: center;
      border-radius: 45%;
      opacity: 0.6;
    }
    #list div:hover {
      cursor: pointer;
      opacity: 1;
    }
    #btn {
      width: 400px;
      text-align: center;
    }
  </style>

这是完整的样式

在这里插入图片描述

每种颜色代表一张图片,且按序标了序号。起始位置是第二张图片。

至于为什么第一张和最后一张有额外重复的一张放在两端,是为了在做滑动效果的时候,最后一张(倒数第二张,粉紫色)可以继续向右顺滑的滑到第一张(其实是本图的第二张,浅棕色的)。第一张(本图第二张,浅棕色)向左滑动时可以顺滑的滑到最后一张(实则倒数第二张)。继续往下看。

1. 多种轮播方式

轮播必然离开不了定位,以及修改wrap列表的left属性,使其移动。

先初始化几个数据

var wrap = document.getElementById('wrap');
var nowleft = -400;          //用于存放当前列表的left的值
var currIndex = 1;			//用于存放当前是第几个图片
//定位到几个按钮
var btnNum = document.getElementsByClassName('btnNum');  //小圆圈

var right = document.getElementsByClassName('right')[0];  //向右滑的按钮
var left = document.getElementsByClassName('left')[0];		//向左滑的按钮

1.1 定时自动轮播效果

只讲向左自动滑动的效果

既然是自动轮播的,那必然少不了setInterval()定时器让其持续轮播。

function next() {
    setInterval(function() {           //设置每两秒切换一次图片
        wrap.style.transition = 'left 1s'  //设定有过渡滑动的效果
		nowleft = parseInt(wrap.style.left) - 400;    //切换一次后nowleft应该减少(即向左滑)一个图片的宽度
        wrap.style.left = nowleft + 'px';      //然后将nowleft赋值给wrap的left属性
        if(parseInt(wrap.style.left) == -2400) {  //判断到最后一个后,偷偷变回到最开头的位置
            setTimeout(() => {
              wrap.style.transition = 'none'   //因为是偷偷变回去,所以要取消过渡效果
              nowleft = -400;
              wrap.style.left = nowleft + 'px'
            },1200)  //保证定时器的时间大于过度的时间且小于每次轮换的时间
          }
    },2000)
}

/由于wrap.style.left 返回的是带px的字符串,所以用parseInt可以取得前面的数值/

1.2 按向右滑动按钮

right.addEventListener('click',function() {
    if(nowleft >= -2000){      //判断是否到最后一个图了,没有的话就开始滑动
      nowleft -= 400;
      wrap.style.transition = 'left 1s';
      wrap.style.left = nowleft + 'px';
    }
    if(nowleft == -2400) {     //如果到最后一个图了,就偷偷换回第一张图
      setTimeout(() => {
        wrap.style.transition = 'none';
        nowleft = -400;
        wrap.style.left = nowleft + 'px';
      },1020)
    }
})

1.3 小圆圈切换图片

for(let i = 0; i < btnNum.length; i++) {
    btnNum[0].style.opacity = 1;
    btnNum[i].addEventListener('click',function() {
      wrap.style.transition = 'left 1s';
      for(let j = 0; j < btnNum.length; j++) {
        btnNum[j].style.opacity = '0.6';
      }
      btnNum[i].style.opacity = 1;
      nowleft = nowleft - (i+1 - currIndex)*400;
      currIndex = i + 1;
      wrap.style.left = nowleft + 'px';
})

其实本文在控制从最后一个图偷偷换回第一张图的操作是有缺陷的,因为要把控序号5的图滑动到序号为r1的图是需要1s的,然而wrap.style.left是直接发生变化的,不会随着过渡期间发生位移而left一直变化。所以把控序号5完整滑动到r1后再偷偷切换到序号1的时间是有些难控制的。

而且比如从序号1连续点击3下是可以切换到序号4的。然是从序号5连续点击3下是不可以的,在r1切换到序号1的时候是无法响应点击效果的,因此此处交互差异会容易感到别扭。

如果想改善这个别扭的bug,可以用下防抖来改善。

原生JS实现自动无缝切换轮播图(可鼠标拖动) ^ _ ^ 最近参加了一个免费的华为在线课程,上面一个作业是用原生js实现轮播图。练手的同时发现工作中框架用的多。原生的都不如以前那么熟练了。特此写这篇文章记录一下。希望能帮助到一些新手盆友。一起学习吧。 目录功能需求实现思路html & CSS结构分析JS逻辑实现知识点小结 功能需求 功能上要实现以下4个需求: 自动无缝切换图片 鼠标左右拖动切换图片 点击小点切换对应图片 浏览器窗口尺寸改变不影响以上功能 实现思路 html & CSS结构分析 JS逻辑实现 知识 阅读详情

相关推荐

原生js实现轮播图(自轮播,两翼轮播,点选)

​ 本篇博文实现的是一个原生js写的轮播图,含括了大部分轮播图的功能,有的同学问前端框架那么多干嘛要用原生写,伤神费脑. ​ 个人感觉程序世界里的框架,是让大牛更牛,小白也永远只是小白.框架是死的,需求是不断更新的,我们只有知道了原理,才能不断利用原理满足别人的需求,总会有那么个时候框架满足不了的.所以,不要依赖框架,为了不让自己一直做小白,最近一直在用原生js写bootstrap的一些...

振飞⁶⁶⁶₆₆₆666 663

JS实战——轮播图

html+css+js实现目前各大网站上轮播图的效果,可以利用我的代码稍加改装就能实现想要的效果。

qq_65715980的博客 3万+

原生JS实现旋转轮播图

实现酷狗轮播图

weixin_41105030的博客 1399

JS实现轮播图的三种简单方法。

Js实现轮播图01 实现思路 这可能是轮播图最简单点的实现之一,通过更改图片的src来实现该效果,首先需要将图片命名格式统一比如pic01.jpg,pic02.jpg…,再通过js使用定时器去改变img标签里面的src图片链接的名字来实现切换效果。代码如下: 实现效果 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>轮播图实现01</title> &

m0_67392409的博客 2万+

地图可视化类型大全

地图可视化类型大全: 散点地图 网格地图 聚合地图 气泡地图 热力图 Choropleth地图/分级设色地图/分级区域地图/着色地图/分级统计地图(百度百科这样翻译)/等值域地图/分段设色地图 Cartogram地图/变形地图/示意地图 规则形状地图 /RecMap/Demers Cartogram/瓷砖网格地图/DorlingMap 流型图(Flow Map)\流线图\流向图\轨迹地图 复合地图

codeuniverse的博客 3534

手把手教你用Qt5打造二次元游戏启动器(附鸣潮同款UI源码)

本文详细介绍了如何使用Qt5框架从零开始构建一个功能完整、UI风格贴近《鸣潮》的二次元游戏启动器。教程涵盖无边框窗口、动态背景、自定义控件绘制、多线程资源加载以及下载管理等核心模块的实现,并提供了可运行的源码参考,帮助C++开发者和Qt爱好者深入掌握现代桌面应用开发技术。

weixin_29291863的博客 265

JS实现轮播图(超详细代码注释)

html,css,javasript实现轮播图,超详细代码注释。实现的功能有:自动轮播,鼠标放上去停止轮播,鼠标离开自动轮播,点击下方小圆圈实现图片切换,点击左右按钮实现切换

m0_56836274的博客 2万+

舵机操作手册

微型伺服马达原理与控制(中鸣) 1、微型伺服马达内部结构一个微型伺服马达内部包括了一个小型直流马达;一组变速齿轮组;一个反馈可调电位器;及一块电子控制板。其中,高速转动的直流马达提供了原始动力,带动变速(减速)齿轮组,使之产生高扭力的输出,齿轮组的变速比愈大,伺服马达的输出扭力也愈大,也就是说越能承受更大的重量,但转动的速度也愈低。 2、微行伺服马达的工作原理一个微型伺服马达是一个典型闭环反馈系统,其原理可由下图表示: 减速齿轮组由马达驱动,其终端(输出端)带动一个线性的比例电位器作位置检测,该电位器把

HEIMENGER的博客 3137

JS实现轮播图

用JS实现轮播图

WYF857446152的博客 7247

cordic算法的FPGA实现

cordic 算法的MATLAB仿真及verilog实现

qq_38360574的博客 1676

刚体转动欧拉方程:从理论到卫星姿态控制的实践

刚体转动欧拉方程是描述刚体旋转运动的基本动力学方程,在卫星姿态控制、机器人学、航空航天等领域有着广泛应用。本文将详细讲解欧拉方程的物理概念、数学推导、数值计算方法,并重点分析其在卫星姿态控制系统中的具体应用。

ScilogyHunter的博客 644

原生JS实现轮播图的几种方式

三种原生JS轮播图实现思路

莫邪莫急的博客 7553

科研绘图系列:基因突变瀑布图统计以及可视化

科研绘图系列:基因突变瀑布图统计以及可视化

专注生信领域 1655

原生js实现轮播图

javascript实现轮播图 一个人走路可能会孤单,但有一群人陪你将会奋勇直前 虽然在真正的开发中很少有可能会自己手写一个轮播图(现在的UI框架几乎都有轮播插件)为了开发效率, 但长期使用各种UI框架会对原生的使用js疏忽太多。 通过原生轮播图效果实现巩固对原生js的理解,同时也致敬曾经刚入行时是小白的自己(为了实现一个轮播图效果到处百度copy) 话不多说直接贴代码 ...

ZHANG_666 643

基于单片机的智能温控风扇设计

该智能温控风扇系统的设计目标是根据环境温度自动控制风扇的转速或开关状态,确保用户始终处于舒适的温度范围内。实时温度监测:通过温度传感器(如DS18B20或DHT22)实时监控环境温度。风扇控制:根据温度变化自动调节风扇的转速,温度过高时风扇加速,温度适中时风扇转速降低,达到节能与舒适平衡。LCD显示:通过LCD屏幕实时显示温度信息。无线通信:通过Wi-Fi或蓝牙模块将温度数据发送至手机或云平台,支持远程控制风扇的开关或调节转速。报警功能:温度过高或过低时,蜂鸣器发出警报,提示用户注意。

2201_76125393的博客 1162

开尔文四线法与电桥(uΩ电阻检测)

本文介绍了开尔文四线法与电桥在电阻测量中的应用,特别是针对uΩ级别电阻的精确检测。讨论了基本电桥电路的工作原理,强调了开尔文四线法的优势,它能消除导线和接触电阻的影响。文中还提到了测试设备的介绍,包括不同级别的电阻测试,并详细阐述了uΩ级别电阻测试的步骤和注意事项。此外,对比了惠斯通电桥与开尔文电桥,强调了它们在电阻测量中的作用和计算方法。

让你爱上电路设计 7865

轮播图 原生js实现

原生js实现轮播图  很多网站上都有轮播图,但却很难找到一个系统讲解的,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出。  github地址 (如果有用,就star一下吧)   原理:   将一些图片在一行中平铺,然后计算偏移量再利用定时器实现定时轮播。   步骤一:建立html基本布局 如下所示: &lt;!DOCTYPE htm...

qq_36746815的博客 241

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

原生js实现轮播图 详细解释

原生js实现轮播图 每一步都解释很详细 话不多说 上源码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script

qq_43806604的博客 428

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

原生JS实现轮播图

使用原生JS实现轮播图,仅需短短几行代码,代码如下 let carousel = new Carousel(); carousel.render({ 'elem': '#carousel', 'data': [ { 'src': 'http://dancheng.zxdyw.com/U_Image/2016/1201/e/20161201093248_7241.jpg', 'alt': '1', ...

深蓝旭的博客 245

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

原生JS 实现轮播图效果

根据传入的图片数量在页面的底部呈现轮播图的图片数量和当前为第几张图片,点击相应的圆圈则可以跳转至其他图片;左右两个按钮同样可以实现图片的切换,如果当前为第一张或者最后一张图片,点击左移或者右移按钮即可完成循环操作,从第一张图片跳转至最后一张图片,且切换图片的效果还在。...

强风吹拂 1040

利用原生JS实现轮播图

写在前面: 利用原生js实现轮播图,没有用任何框架 之前有人说,来前端面试前,先实现一个js写轮播图吧 最近刷了一套百度笔试题全球,其中就有这样一道编程题 说起来很简单,但自己动手实现一下还是很有必要的 原理: 一行多个内容,通过移动这一行,只显示某一个部分 效果: 代码: html <!DOCTYPE html> <html> <head> &l...

止水 540

JavaScript:原生js实现轮播图

思路是,我一开始给pic的最后再加一张图片,这个图片与第一张图片一模一样,在这个例子中,pic有五个图片,但是实际上有六个,因为我在最后再加了一个与第一张完全一样的图片:接下来的讲解中我将用数字代表这些图片为了完成轮播图的功能,我再设定一个变量flag,含义为当前的轮播图播放到哪一张图了以right按钮flag = 0;}})}})}})这里有一些判断语句:第一个if表示,当我已经到达最后一张(第二个1),让pic快速的,没有动画的移动到第一张的位置,这样就能实现无缝播放的功能。

qq_54517101的博客 694

原生js实现轮播图的两种方式

element-ui组件库中,有一个Carousel走马灯组件,也就是我们平时说的轮播图,为了搞清它的实现原理,接下来我们使用原生js实现一个轮播图效果

h395910638的博客 1444

原生js实现动态轮播图

用html+css和简单的js代码,实现一个有个有导航栏的轮播图。 Lis技术

CHENJIANCONG66的博客 2799

js实现轮播图_原生js轮播图

轮播图,在项目中的使用率是非常高的,在这边发一个纯手写的原生js轮播图,话不多说,直接上代码------------------------代码开始-------------------------------HTML部分代码<divclass="wrap"id="wrap"><ulclass="list"id="list"&gt...

weixin_39887926的博客 129
上一篇: JS算法之栈
下一篇: Vue源码前戏之Mustache模板引擎的源码解析
IsPinocchio
博客等级 码龄8年 23粉丝 25原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值