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 JavaScript获取Url参数,src属性参数
Mar 09 Javascript
对xmlHttp对象的理解
Jan 17 Javascript
Jquery通过Ajax访问XML数据的小例子
Nov 18 Javascript
JavaScript中的replace()方法使用详解
Jun 06 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
使用Script元素发送JSONP请求的方法
Jun 12 Javascript
微信小程序 wxapp内容组件 progress详细介绍
Oct 31 Javascript
详解Angular的8个主要构造块
Jun 20 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
JS排序算法之希尔排序与快速排序实现方法
Dec 12 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
May 25 Javascript
Express本地测试HTTPS的示例代码
Jun 06 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之对抗Web扫描器的脚本技巧
2008/10/01 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
JSON在PHP中的应用介绍
2012/09/08 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
php session的锁和并发
2016/01/22 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
详解vue项目首页加载速度优化
2017/10/18 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
python导入模块交叉引用的方法
2019/01/19 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
工程力学专业毕业生求职信
2013/10/06 职场文书
房屋改造计划书
2014/01/10 职场文书
药学职务聘任书
2014/03/29 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
检讨书大全
2015/01/27 职场文书
个人自荐书怎么写
2015/03/26 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
django 认证类配置实现
2021/11/11 Python
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android