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 面向对象全新理练之数据的封装
Dec 03 Javascript
jQuery让控件左右移动的三种实现方法
Sep 08 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
Jun 16 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
Oct 30 Javascript
在JavaScript中call()与apply()区别
Jan 22 Javascript
javascript实现一个简单的弹出窗
Feb 22 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
基于vuejs实现一个todolist项目
Apr 11 Javascript
JS实现前端缓存的方法
Sep 21 Javascript
详解react内联样式使用webpack将px转rem
Sep 13 Javascript
浅谈layui 数据表格前后台传值的问题
Sep 12 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遍历数组的几种方法
2012/03/22 PHP
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
jQuery响应滚动条事件功能示例
2017/10/14 jQuery
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
C#面试题问题集
2016/04/02 面试题
群众路线批评与自我批评
2014/02/06 职场文书
保密承诺书范文
2014/03/27 职场文书
学生会主席演讲稿
2014/04/25 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
街道务虚会发言材料
2014/10/20 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
工厂见习报告范文
2014/10/31 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
打架检讨书
2015/01/27 职场文书
大学生入党群众意见书
2015/06/02 职场文书
校园开放日新闻稿
2015/07/17 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
七年级生物教学反思
2016/02/20 职场文书
详解Vue3使用axios的配置教程
2022/04/29 Vue.js
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers