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 相关文章推荐
学习jquery必备 api中英文对照的chm手册 下载
May 03 Javascript
一些有用的JavaScript和jQuery的片段分享
Aug 23 Javascript
DWZ table的原生分页浅谈
Mar 01 Javascript
子窗体与父窗体传值示例js代码
Aug 01 Javascript
jquery实现具有收缩功能的垂直导航菜单
Feb 16 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
Nov 05 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
May 16 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
重学JS 系列:聊聊继承(推荐)
Apr 11 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
webpack的移动端适配方案小结
Jul 25 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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
JS实现瀑布流布局
2017/10/21 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
python网络编程之数据传输UDP实例分析
2015/05/20 Python
python实现多线程抓取知乎用户
2016/12/12 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
python 求10个数的平均数实例
2019/12/16 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
python中doctest库实例用法
2020/12/31 Python
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
电子商务专员岗位职责
2013/12/11 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
我的老师教学反思
2014/05/01 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
公司周年庆寄语
2019/06/21 职场文书