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之解决IE下不渲染的bug
Jun 29 Javascript
IE FF OPERA都可用的弹出层实现代码
Sep 29 Javascript
IE浏览器打印的页眉页脚设置解决方法
Dec 08 Javascript
一些实用的jQuery代码片段收集
Jul 12 Javascript
javascript学习笔记(八) js内置对象
Jun 19 Javascript
js 跳出页面的frameset框架示例介绍
Dec 23 Javascript
js选项卡的实现方法
Feb 09 Javascript
jQuery搜索同辈元素方法
Feb 10 Javascript
vue-cli axios请求方式及跨域处理问题
Mar 28 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
Js参数RSA加密传输之jsencrypt.js的使用
Feb 07 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 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实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
laravel model 两表联查示例
2019/10/24 PHP
javascript Excel操作知识点
2009/04/24 Javascript
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
Python入门教程之if语句的用法
2015/05/14 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
分析python切片原理和方法
2017/12/19 Python
女性时尚在线:IVRose
2019/02/23 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
UNIX文件名称有什么规定
2013/03/25 面试题
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers
js作用域及作用域链工作引擎
2022/07/07 Javascript