JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解


Posted in Javascript onJanuary 09, 2019

本文实例讲述了JavaScript学习笔记之基于定时器实现图片无缝滚动功能。分享给大家供大家参考,具体如下:

一、无缝滚动理论基础

基础知识

1.setInterval(function,time)、clearInterval(timer)

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。

2.offsetLeft与style.left的区别

offsetLeft 获取的是相对于父对象的左边距

left 获取或设置相对于 具有定位属性(position定义为relative)的父对象 的左边距

如果父div的position定义为relative,子div的position定义为absolute,那么子div的style.left的值是相对于父div的值,

这同offsetLeft是相同的,区别在于:

1. style.left 返回的是字符串,如28px,offsetLeft返回的是数值28,如果需要对取得的值进行计算,还用offsetLeft比较方便。
2. style.left是读写的,offsetLeft是只读的,所以要改变div的位置,只能修改style.left
3. style.left的值需要事先定义,否则取到的值为空。而且必须要定义在html里,我做过试验,如果定义在css里,style.left的值仍然 为空,这就是我刚开始碰到的问题,总是取不到style.left的值。

offsetLeft则仍然能够取到,无需事先定义div的位置。

二、代码片段

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>无缝滚动</title>
  <style>
    *{
      margin: 0;
      padding: 0;
    }
    #div2{
      width: 400px;
      margin: 100px auto;
    }
    input{
      margin:0 auto;
      text-align: center;
      margin-left: 80px;
      font-size: 40px;
    }
    #div1{
      width: 712px;
      height: 108px;
      margin: 100px auto;
      position: relative;
      background-color: red;
      overflow: hidden;
    }
    #div1 ul{
      position: absolute;
      left: 0;
      top: 0;
    }
    #div1 ul li{
      float: left;
      width: 178px;
      height: 108px;
      list-style:none;
    }
  </style>
  <script>
    window.onload=function(){
      var oDiv=document.getElementById('div1');
      var oUl=document.getElementsByTagName('ul')[0];
      var aLi=oUl.getElementsByTagName('li');
      var lBtn=document.getElementById('lbtn');
      var rBtn=document.getElementById('rbtn');
      //将ul复制一份相加复制给ul(这样ul相当于有8张图片)
      oUl.innerHTML=oUl.innerHTML+oUl.innerHTML;
      oUl.style.width=aLi[0].offsetWidth*aLi.length+'px';
      //speed控制图片移动方向和速度
      var speed=2;
      function move(){
        if(oUl.offsetLeft<-oUl.offsetWidth/2){
          oUl.style.left=0;
        }
        if(oUl.offsetLeft>0)
        {
          oUl.style.left=-oUl.offsetWidth/2+'px';
        }
        oUl.style.left=oUl.offsetLeft+speed+'px';
      }
      var timer=setInterval(move,30);
      // 鼠标移进时,图片停止运动
      oDiv.onmouseover=function(){
        clearInterval(timer);
      };
      //鼠标移出时,图片继续移动
      oDiv.onmouseout=function(){
      timer=setInterval(move,30);
      }
      //按钮控制移动方向
      lBtn.onclick= function () {
        speed=-2;
      }
      rBtn.onclick=function(){
        speed=2;
      }
    };
  </script>
</head>
<body>
<div id="div2" >
  <input type="button" value="向左" id="lbtn"/>
  <input type="button" value="向右" id="rbtn"/>
</div>
  <div id="div1">
    <ul>
      <li><img src="images/1.jpg" alt=""/></li>
      <li><img src="images/2.jpg" alt=""/></li>
      <li><img src="images/3.jpg" alt=""/></li>
      <li><img src="images/4.jpg" alt=""/></li>
    </ul>
  </div>
</body>
</html>

三、效果图

 JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript中使用css需要注意的地方小结
Sep 01 Javascript
JavaScript学习笔记(一) js基本语法
Oct 25 Javascript
JS判断客户端是手机还是PC的2个代码
Apr 12 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 Javascript
jQuery中bind()方法用法实例
Jan 19 Javascript
jQuery滚动条插件nanoscroller使用指南
Apr 21 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
May 22 Javascript
axios使用拦截器统一处理所有的http请求的方法
Nov 02 Javascript
vue如何获取自定义元素属性参数值的方法
May 14 Javascript
webpack4 SplitChunks实现代码分隔详解
May 23 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 Javascript
element-ui 时间选择器限制范围的实现(随动)
Jan 09 #Javascript
JavaScript学习笔记之DOM基础操作实例小结
Jan 09 #Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 #Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 #Javascript
浅谈webpack性能榨汁机(打包速度优化)
Jan 09 #Javascript
Node.js的进程管理的深入理解
Jan 09 #Javascript
从vue源码看props的用法
Jan 09 #Javascript
You might like
PHP函数utf8转gb2312编码
2006/12/21 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
js数组操作常用方法
2014/05/08 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
在Python下尝试多线程编程
2015/04/28 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
员工自我鉴定
2013/10/09 职场文书
财务会计实习报告体会
2013/12/20 职场文书
高中军训感言600字
2014/03/11 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
大学班级学风建设方案
2014/05/01 职场文书
500字小学生检讨书
2015/02/19 职场文书
环卫处个人工作总结
2015/03/04 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技