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 创建快捷方式的代码(fso)
Nov 19 Javascript
JS图片根据鼠标滚动延时加载的实例代码
Jul 13 Javascript
javascript实现日期格式转换
Dec 16 Javascript
微信小程序 Flex布局详解
Oct 09 Javascript
AngularJS中watch监听用法分析
Nov 04 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
JS实现针对给定时间的倒计时功能示例
Apr 11 Javascript
浅谈Vue父子组件和非父子组件传值问题
Aug 22 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
Jul 28 Javascript
原生js实现分页效果
Sep 23 Javascript
关于antd tree 和父子组件之间的传值问题(react 总结)
Jun 02 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
基于mysql的论坛(2)
2006/10/09 PHP
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
python字符串中的单双引
2017/02/16 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
python简单贪吃蛇开发
2019/01/28 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
综合办公室主任岗位职责
2014/04/13 职场文书
中小企业员工手册范本
2015/05/14 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
班主任寄语2016
2015/12/04 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL