原生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 相关文章推荐
javascript replace()正则替换实现代码
Feb 26 Javascript
javascript面向对象包装类Class封装类库剖析
Jan 24 Javascript
jquery设置控件位置的方法
Aug 21 Javascript
js实现网页图片延时加载 提升网页打开速度
Jan 26 Javascript
Google 地图事件实例讲解
Aug 06 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 Javascript
3分钟了解vue数据劫持的原理实现
May 01 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
解决vue-router 嵌套路由没反应的问题
Sep 22 Javascript
OpenLayers3实现鼠标移动显示坐标
Sep 25 Javascript
ElementUI实现el-form表单重置功能按钮
Jul 21 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
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
对python中Json与object转化的方法详解
2018/12/31 Python
python生成带有表格的图片实例
2019/02/03 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
一个SQL面试题
2014/08/21 面试题
区三好学生主要事迹
2014/01/30 职场文书
服务标兵事迹材料
2014/05/04 职场文书
项目建议书模板
2014/05/12 职场文书
诚信考试标语
2014/06/24 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
生日宴会祝酒词
2015/08/10 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python