原生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----文件操作
Jan 18 Javascript
jQuery each()方法的使用方法
Mar 18 Javascript
javascript操纵OGNL标签示例代码
Jun 16 Javascript
jQuery中toggle()函数的使用实例
Apr 17 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
多种JQuery循环滚动文字图片效果代码
Jun 23 Javascript
jQuery基于排序功能实现上移、下移的方法
Nov 26 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
Feb 21 Javascript
vuex 使用文档小结篇
Jan 11 Javascript
vue.js,ajax渲染页面的实例
Feb 11 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
JavaScript构造函数原理及实现流程解析
Nov 19 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
加速XP搜索功能堪比vista
2007/03/22 PHP
php 一元分词算法
2009/11/30 PHP
PHP基础知识介绍
2013/09/17 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python模块restful使用方法实例
2013/12/10 Python
多版本Python共存的配置方法
2017/05/22 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
python多线程抽象编程模型详解
2019/03/20 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
社区优秀志愿者材料
2014/02/02 职场文书
加薪申请报告范本
2015/05/15 职场文书
公司老总年会致辞
2015/07/30 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL