原生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 相关文章推荐
用一段js程序来实现动画功能
Mar 06 Javascript
jQuery 打造动态渐变按钮 详细图文教程
Apr 25 Javascript
有趣的JavaScript数组长度问题代码说明
Jan 20 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
Nov 04 Javascript
jquery日历控件实现方法分享
Mar 07 Javascript
详谈JavaScript的闭包及应用
Jan 17 Javascript
JS中如何实现点击a标签返回页面顶部的问题
Jan 19 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
vue-router+nginx 非根路径配置方法
Jun 30 Javascript
微信小程序的tab选项卡的实现效果
May 15 Javascript
微信小程序云开发之数据库操作
May 18 Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
php设计模式 FlyWeight (享元模式)
2011/06/26 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
PHP实现文件上传与下载
2020/08/28 PHP
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
Python探索之SocketServer详解
2017/10/28 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
详解python破解zip文件密码的方法
2020/01/13 Python
python基于opencv 实现图像时钟
2021/01/04 Python
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
三年级数学教学反思
2014/01/31 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
医院科室评语
2015/01/04 职场文书
交通事故起诉书
2015/05/19 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
python使用glob检索文件的操作
2021/05/20 Python