原生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 相关文章推荐
基于jQuery的获得各种控件Value的方法
Nov 19 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
jQuery实现购物车数字加减效果
Mar 14 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
浅谈Jquery核心函数
Jun 18 Javascript
javascript实现3D切换焦点图
Oct 16 Javascript
JavaScript知识点总结之如何提高性能
Jan 15 Javascript
vue-cli项目中使用Mockjs详解
May 14 Javascript
Angular6中使用Swiper的方法示例
Jul 09 Javascript
chosen实现省市区三级联动
Aug 16 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
Dec 30 Javascript
关于引入vue.js 文件的知识点总结
Jan 28 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 mysql 封装类实例代码
2016/09/18 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
对于Python的Django框架部署的一些建议
2015/04/09 Python
python集合用法实例分析
2015/05/30 Python
python3实现mysql导出excel的方法
2019/07/31 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
教师自我鉴定
2013/12/13 职场文书
公司离职证明范本
2014/01/13 职场文书
关于母亲节的感言
2014/02/04 职场文书
市场开发计划书
2014/05/07 职场文书
中秋晚会活动方案
2014/08/31 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年工程部工作总结
2014/11/25 职场文书
社区国庆节活动总结
2015/03/23 职场文书