原生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 相关文章推荐
Eval and new funciton not the same thing
Dec 27 Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
js实现checkbox全选、不选与反选的方法
Feb 09 Javascript
jQuery实现当前页面标签高亮显示的方法
Mar 10 Javascript
JQUERY简单按钮轮换选中效果实现方法
May 07 Javascript
jQuery实现强制cookie过期方法汇总
May 22 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
js滚轮事件兼容性问题需要注意哪些
Nov 15 Javascript
js数字滑动时钟的简单实现(示例讲解)
Aug 14 Javascript
Vue中JS动画与Velocity.js的结合使用
Feb 13 Javascript
ionic3双击返回退出应用的方法
Sep 17 Javascript
React中获取数据的3种方法及优缺点
Feb 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
提升PHP执行速度全攻略
2006/10/09 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php中in_array函数用法探究
2014/11/25 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
php取出数组单个值的方法
2018/03/12 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
Python中的hypot()方法使用简介
2015/05/18 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
办公室主任先进事迹
2014/01/18 职场文书
操行评语大全
2014/04/30 职场文书
教师教学评估方案
2014/05/09 职场文书
幼儿生日活动方案
2014/08/27 职场文书
初中军训感想
2015/08/07 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
redis缓存存储Session原理机制
2021/11/20 Redis
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫