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 相关文章推荐
浅析JS中document对象的一些重要属性
Mar 06 Javascript
使用AngularJS来实现HTML页面嵌套的方法
Jun 17 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
Sep 06 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
浅谈jquery中使用canvas的问题
Oct 10 Javascript
利用JQuery实现datatables插件的增加和删除行功能
Jan 06 Javascript
vue使用drag与drop实现拖拽的示例代码
Sep 07 Javascript
JavaScript代码执行的先后顺序问题
Oct 29 Javascript
vue项目中v-model父子组件通信的实现详解
Dec 10 Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 Javascript
用Vue.js方法创建模板并使用多个模板合成
Jun 28 Javascript
vue.js实现简单的计算器功能
Feb 22 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
文字幻灯片
2006/06/26 Javascript
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
jquery遍历input取得input的name
2009/04/27 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python交换变量
2008/09/06 Python
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python阶乘求和的代码详解
2020/02/14 Python
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
分家协议书
2014/04/21 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
入党推优材料
2014/06/02 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
python xlwt模块的使用解析
2021/04/13 Python
Python数据类型最全知识总结
2021/05/31 Python
详解在OpenCV中如何使用图像像素
2022/03/03 Python