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 相关文章推荐
IE autocomplete internet explorer's autocomplete
Jun 30 Javascript
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
输入密码检测大写是否锁定js实现代码
Dec 03 Javascript
javascript表单验证使用示例(javascript验证邮箱)
Jan 07 Javascript
JavaScript中判断原生函数检查function是否是原生代码
Sep 09 Javascript
基于jquery实现复选框全选,反选,全不选等功能
Oct 16 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
jquery UI Datepicker时间控件冲突问题解决
Dec 16 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
Dec 24 Javascript
Canvas + JavaScript 制作图片粒子效果
Feb 08 Javascript
使用jQuery实现简单的tab框实例
Aug 22 jQuery
vue3+typeScript穿梭框的实现示例
Dec 29 Vue.js
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” 彩蛋进行敏感信息获取
2013/08/07 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
YII框架关联查询操作示例
2019/04/29 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
初识Node.js
2014/09/03 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
jquery自适应布局的简单实例
2016/05/28 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
python远程邮件控制电脑升级版
2019/05/23 Python
Python更换pip源方法过程解析
2020/05/19 Python
Keras loss函数剖析
2020/07/06 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
小区门卫岗位职责
2013/12/31 职场文书
经理助理岗位职责
2015/02/02 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书