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 常用方法总结
Jun 03 Javascript
提交表单时执行func方法实现代码
Mar 17 Javascript
同时使用n个window onload加载实例介绍
Apr 25 Javascript
js switch case default 的用法示例介绍
Oct 23 Javascript
Javascript判断文件是否存在(客户端/服务器端)
Sep 16 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
Jul 01 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
解决vue项目报错webpackJsonp is not defined问题
Mar 14 Javascript
Vue 中mixin 的用法详解
Apr 23 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
Aug 12 Javascript
GOJS+VUE实现流程图效果
Dec 01 Javascript
详解Jest结合Vue-test-utils使用的初步实践
Jun 27 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实现jQuery扩展函数
2009/10/30 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
javascript 闭包详解
2015/07/02 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
python如何在循环引用中管理内存
2018/03/20 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
HTML5样式控制示例代码
2013/11/27 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
自荐信格式的六要素
2013/09/21 职场文书
本科生学习总结的自我评价
2013/10/02 职场文书
中秋节超市促销方案
2014/01/30 职场文书
2015年公务员工作总结
2015/04/24 职场文书
海上钢琴师观后感
2015/06/03 职场文书
小学总务工作总结
2015/08/13 职场文书
聘用合同范本
2015/09/21 职场文书