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国旗变换效果代码
Aug 13 Javascript
JS操作JSON要领详细总结
Aug 25 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
May 19 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
May 24 Javascript
AngularJS中$apply方法和$watch方法用法总结
Dec 13 Javascript
JQuery实现动态操作表格
Jan 11 Javascript
基于vue.js的分页插件详解
Nov 27 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
Mar 01 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 Javascript
iphone刘海屏页面适配方法
May 07 Javascript
在vue中嵌入外部网站的实现
Nov 13 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 daodb插入、更新与删除数据
2009/03/19 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
28个常用JavaScript方法集锦
2015/01/14 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
package.json文件配置详解
2017/06/15 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
python中partial()基础用法说明
2018/12/30 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
数据库基础的一些面试题
2012/02/25 面试题
2014新课程改革心得体会
2014/03/10 职场文书
专业技术职务聘任书
2014/03/29 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
保险专业求职信
2014/07/07 职场文书
会计个人实习计划书
2014/08/15 职场文书
暑期社会实践证明书
2014/11/17 职场文书
高二化学教学反思
2016/02/22 职场文书
导游词之日月潭
2019/11/05 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers
实战Python爬虫爬取酷我音乐
2022/04/11 Python
GPU服务器的多用户配置方法
2022/07/07 Servers
python计算列表元素与乘积详情
2022/08/05 Python