原生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 appendChild,innerHTML,join性能比较代码
Aug 29 Javascript
js切换div css注意的细节
Dec 10 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
May 15 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
javascript解三阶幻方(九宫格)
Apr 22 Javascript
原生js获取元素样式的简单方法
Aug 06 Javascript
React中的refs的使用教程
Feb 13 Javascript
微信小程序实现手势滑动卡片效果
Aug 26 Javascript
JS函数基本定义与用法示例
Jan 15 Javascript
vue 使用 canvas 实现手写电子签名
Mar 06 Javascript
vue+element_ui上传文件,并传递额外参数操作
Dec 05 Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php数组去重复数据示例
2014/02/25 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
php正则修正符用法实例详解
2016/12/29 PHP
jquery 常用操作方法
2010/01/28 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
python生成式的send()方法(详解)
2017/05/08 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python排序算法实例代码
2017/08/10 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
django中使用POST方法获取POST数据
2019/08/20 Python
python 模块导入问题汇总
2021/02/01 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
高中毕业生自我鉴定
2013/11/03 职场文书
婚前协议书范本
2014/04/15 职场文书
林肯就职演讲稿
2014/05/19 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS