原生JS实现简单的无缝自动轮播效果


Posted in Javascript onSeptember 26, 2018

最近在不断的加强巩固js。在学习jq和vue之后发现很多东西其实都是不明所以,有些底层的东西自己不懂,到头来也只是一昧的使用,一直在用别人的东西,对自己的成长帮助也不大。

万丈高楼平地起,基础打扎实了学什么都快,而且我觉得用原生的代码写完好像自己有点小成就感的。现在记录一下今天复习的原生js无缝轮播吧。

先上一张自拍镇楼,哈哈哈

首先先说一下思路吧,首先任意张图片以ul的形式保存显示,上代码吧

<div id="wrap">
  <ul id="ul">
    <li>
      <img src="http://img3.imgtn.bdimg.com/it/u=1135520735,2369294998&fm=200&gp=0.jpg">
    </li>
    <li>
      <img src="http://img2.imgtn.bdimg.com/it/u=695607252,2370769232&fm=200&gp=0.jpg">
    </li>
    <li>
      <img src="http://img4.imgtn.bdimg.com/it/u=4133407901,1533904167&fm=200&gp=0.jpg">
    </li>
    <li>
      <img src="http://img5.imgtn.bdimg.com/it/u=4083237979,1376579798&fm=26&gp=0.jpg">
    </li>
    <li>
      <img src="http://img2.imgtn.bdimg.com/it/u=1640379911,3259036309&fm=26&gp=0.jpg">
    </li>
  </ul>
</div>

图片轮播的话我是让整个ul移动显示,而不是更改li的margin,上css代码,因为一张图片设置是80px;所以容器的width就是400了。       

#wrap{
        width: 400px;
        height: 80px;
        overflow: hidden;
        margin-left: 500px;
        margin-top: 300px;
        position: relative;
      }
      #ul{
        position: absolute;
        left: 0;
        top: 0;
        width: 400px;
        font-size: 0;
        margin: 0;
        padding: 0;
      }

然后js代码就很简单了,直接设置一个定时器,让ul缓慢的右移或者左移就可以了。但是会有一个问题,我们等下再讨论,先附上代码

window.onload = function(){
  var odiv = document.getElementById('wrap');
  var oul = document.getElementById('ul');
  setInterval(function(){
    oul.style.left = oul.offsetLeft + 5 +'px';
  },30)

但是图片往右走了就回不了头了,上面的代码只是让图片一直往左移动,那怎么实现当最后一张图片移动到左边缘时第一张图片重新显示,其实很简单

比如图片是1、2、3、4这么显示,那么我们多一份图片不就可以了,也就是说1、2、3、4、1、2、3、4,然后当第2组图片显示到4的时候,我们将ul重新拉回来

那么代码就可以这么写了         

var odiv = document.getElementById('wrap');
      var oul = document.getElementById('ul');
      var oli = oul.getElementsByTagName('li');
      oul.innerHTML = oul.innerHTML + oul.innerHTML;//拼接li,因为图片可能是任意张
      oul.style.width = oli[1].offsetWidth * oli.length + 'px';//ul的宽度等于所有图片宽度的总和
    setInterval(function(){
      if (oul.offsetLeft < -oul.offsetWidth/2) {
        oul.style.left = 0;//如果ul已经显示完了一组,也就是宽度的一半,那么就把他拉回来重新轮播
      }else{
        oul.style.left = oul.offsetLeft - 2 +'px';
      }
    },30);

这样就完成了,可以复制代码在浏览器查看效果。

总结

以上所述是小编给大家介绍的原生JS实现简单的无缝自动轮播效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
多个iframe自动调整大小的问题
Sep 18 Javascript
犀利的js 函数集合
Jun 11 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
Nov 30 Javascript
浅谈Javascript的静态属性和原型属性
May 07 Javascript
noty ? jQuery通知插件全面解析
May 18 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
使用微信小程序开发前端【快速入门】
Dec 05 Javascript
微信小程序中使用javascript 回调函数
May 11 Javascript
react系列从零开始_简单谈谈react
Jul 06 Javascript
js图片无缝滚动插件使用详解
May 26 Javascript
ionic2.0双击返回键退出应用
Sep 17 Javascript
使用js实现单链解决前端队列问题的方法
Feb 03 Javascript
Vue中控制v-for循环次数的实现方法
Sep 26 #Javascript
web页面和微信小程序页面实现瀑布流效果
Sep 26 #Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
Sep 26 #Javascript
Vue监听事件实现计数点击依次增加的方法
Sep 26 #Javascript
在vue 中使用 less的教程详解
Sep 26 #Javascript
vue如何进行动画的封装
Sep 26 #Javascript
vue使用rem实现 移动端屏幕适配
Sep 26 #Javascript
You might like
用PHP调用数据库的存贮过程!
2006/10/09 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
2016/09/28 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
简单介绍Python中的round()方法
2015/05/15 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
Python实现全排列的打印
2018/08/18 Python
使用Python的turtle模块画国旗
2019/09/24 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
泰国在线书店:SE-ED
2020/06/21 全球购物
商场经理竞聘演讲稿
2014/01/01 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
万能检讨书2000字
2014/10/17 职场文书
资料员岗位职责
2015/02/10 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书