原生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 相关文章推荐
腾讯的ip接口 方便获取当前用户的ip地理位置
Nov 25 Javascript
用Jquery重写windows.alert方法实现思路
Apr 03 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
Aug 22 Javascript
优化RequireJS项目的相关技巧总结
Jul 01 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
Bootstrap模态框插件使用详解
May 11 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
May 17 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
Nov 24 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
uniapp开发小程序的经验总结
Apr 08 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 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
比较详细PHP生成静态页面教程
2012/01/10 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
PHP微信支付实例解析
2016/07/22 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
js轮播图代码分享
2016/07/14 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python与Redis的连接教程
2015/04/22 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
python破解zip加密文件的方法
2018/05/31 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
python实现车牌识别的示例代码
2019/08/05 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
python Selenium 库的使用技巧
2020/10/16 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
初一学生评语大全
2014/04/24 职场文书
部门活动策划方案
2014/08/16 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
2015员工年度考核评语
2015/03/25 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
离婚起诉书范本
2015/05/18 职场文书