博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原生javascript实现无缝滚动
阅读量:5977 次
发布时间:2019-06-20

本文共 2689 字,大约阅读时间需要 8 分钟。

实现javascript的无缝滚动需要掌握基本的定位和运动知识

逐步分析图片的无缝滚动是怎么实现的
HTML的基本结构如下

CSS样式:

#moving {  width: 600px;  height: 370px;  background-color: #ccc;  position: relative;  margin: 30px auto 0;  overflow: hidden;}#moving ul {  position: absolute;  left: 0;  top: 0;}#moving ul li {  list-style: none;  float: left;}#control {  width:300px;  margin: 20px auto;}#control input {  margin-left: 30px;  width: 50px;}

要实现图片窗口整体的无缝滚动(我们需要通过定时器定时改变<ul>的位置,于是我们有下面的片段来实现:

oUl.style.left = oUl.offsetLeft + speed + 'px';

speed对应定时器时间段内移动的距离,oUl指ul

    开始这样做能实现基本的运动,但是图片总是数量有限的,当最后一张图片滚动展示完毕后,后面就没有了内容。那么我们如何克服这个困难,让滚动一直持续循环下去呢?
    为了达到这种效果,我们可以克隆同样的ul结构,并且拼接在一起,比如:

oUl.innerHTML += oUl.innerHTML;

注意不要漏了在ul加入overflow:hidden,否则可能会两栏显示

但是这样做还是不够的,图片总会播放完,但是我们不可能复制成千上万分一样的ul结构
这时候需要一点小技巧
当左段ul(为了阐述方便,分为两段,左段为原始,右段为复制的那份)滚动完成,右段的开头即将离开图片窗口的时候,将整个ul拉回到原始位置。如果是向右运动,那么当左端的开头第一张图片到左边尽头时,整个ul拉回到起始位置

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';        }

以下是javascript部分

window.onload = function(){        var oMove = document.getElementById('moving');        var oUl = oMove.getElementsByTagName('ul')[0];        var aLi = oUl.getElementsByTagName('li');        var oCtr = document.getElementById('control');        var oLeft = document.getElementById('left');        var oRight = document.getElementById('right');        var speed = null;        oUl.innerHTML += oUl.innerHTML;  //两段一样的内容        oUl.style.width = aLi[0].offsetWidth*aLi.length + "px";  //两段ul宽度不够,第二段会掉下去        oLeft.onclick = function(){            return speed = -3;        }        oRight.onclick = function(){            return speed = 3;        }        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);        oMove.onmouseover = function(){            clearInterval(timer);        };        oMove.onmouseout = function(){            timer = setInterval(move,30);        };        var btn = document.getElementById("stop");        btn.onclick = function(){            clearInterval(timer);   //stop按键停止运动,如果在点击后将鼠标先移入图片再移出会重新开启        }    }

以上是智能社课程学习内容

转载地址:http://kupox.baihongyu.com/

你可能感兴趣的文章
springmvc请求参数获取(自动绑定)的几种方法
查看>>
对导航条的改造
查看>>
python 异常处理
查看>>
程序局部性原理的一些思考
查看>>
AKOJ-2037-出行方案
查看>>
今天依然在切题的我
查看>>
WebApi服务监控 log4net记录监控日志
查看>>
Jenkins加Shell实现最简单的持续部署
查看>>
day11--RabbitMQ、Redis
查看>>
node项目发送邮件失败
查看>>
HTML常见小问题2
查看>>
iOS 学习
查看>>
原型与原型链
查看>>
Spring Boot 配置文件中的花样,看这一篇足矣!
查看>>
5 极限存在准则及两个重要极限
查看>>
数组相同部分
查看>>
Git 基础 —— 安装 配置 别名 对象
查看>>
Spring Cloud Feign 基础
查看>>
Android初级开发笔记-- activity启动模式的学习(1)
查看>>
单点登录系统SSO概述 | 单点登录讲解(1)
查看>>