《JavaScript学习笔记十》:无缝滚动的实现
2016-05-30 20:22
429 查看
《JavaScript学习笔记十》:无缝滚动的实现
无缝滚动在很多网页上面都有这样一个功能,用于动态的显示一些图片信息。本篇博文就是模拟这样一个功能的实现,所设计的知识点为:根据offsetLeft动态的获取位置更改控件的left的值来使得控件移动。
先看如下的简单的例子,一个Div控件不断向右移动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> <style> #div1 {width:200px;height:100px;position:absolute;background:red;left:70px;top:30px;margin:100px} </style> <script> window.onload=function() { setInterval(function() { var oDiv = document.getElementById('div1'); oDiv.style.left=oDiv.offsetLeft+10+'px'; },1000); }; </script> </head> <body> <div id="div1"> </div> </body> </html>
有了上面的基础,就来看看无缝滚动的具体实现的代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> <style> * {margin:0; padding:0;} #div1 {width:712px;height:108px;margin:100px auto;position:relative;background: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 = oDiv.getElementsByTagName('ul')[0]; var oLi=oUl.getElementsByTagName('li'); oUl.innerHTML+=oUl.innerHTML; //用两倍来进行移动 oUl.style.width=oLi[0].offsetWidth*oLi.length+'px';//不能用:oLi[0].style.width var timer; var dis=2; function move() { //alert(oUl.offsetLeft); //alert(oUl.offsetWidth); if(oUl.offsetLeft<-oUl.offsetWidth/2)//即当向左滚动出去一半的时候,就立即将ul放在起点位置 { oUl.style.left='0px'; } if(oUl.offsetLeft>0)//即当向右滚动出去一半的时候,就立即将ul放在起点位置 { oUl.style.left=-oUl.offsetWidth/2+'px'; } oUl.style.left=oUl.offsetLeft+dis+'px';//由于ul为绝对定位,可以由width/height等来决定 } timer=setInterval(move,100); //当我们鼠标移动到div上面时,就应该停止 oDiv.onmouseover=function() { clearInterval(timer); }; oDiv.onmouseout=function() { timer=setInterval(move,100); }; var oBtn1=document.getElementById('btn1'); var oBtn2=document.getElementById('btn2'); btn1.onclick=function() { dis=-2; }; btn2.onclick=function() { dis=2; }; }; </script> </head> <body> <input id="btn1" type="button" value="向左滚动" /> <input id="btn2" type="button" value="向右滚动" /> <div id="div1"> <ul><!--每个图片大小为:178*108px --> <li><img src="img2/1.jpg" /></li> <li><img src="img2/2.jpg" /></li> <li><img src="img2/3.jpg" /></li> <li><img src="img2/4.jpg" /></li> </ul> </div> </body> </html>
从上面的代码可以看出,稍微有点复杂,需要我们仔细的分析,由于代码注释写的比较清楚,这里就不再解释,如果一遍没有看懂,可以多看几遍。
以上就是关于JavaScript的无缝滚动的实现。
参考资料
1、blue老师的《js视频教程》相关文章推荐
- 《JavaScript学习笔记九》:延时框的实现
- 《JavaScript学习笔记八》:数字时钟的实现
- 轻量级图形报表工具JSCharts (JSChart),内置函数中文参考
- 《JavaScript学习笔记七》:数组和可变参数arguments的介绍
- 《JavaScript学习笔记六》:取非行间样式
- json对象与json字符串的相互转换
- JavaScript学习笔记03
- [JavaScript] 11.JS 偶识【正则表达式】[2]
- [JavaScript] 10.JS 表单操作
- javaScript 工作必知(八) 属性的特性 值、写、枚举、可配置
- Javascript 判断对象是否相等。
- [JavaScript] 9.JS DOM模型
- [RxJS] Transformation operators: debounce and debounceTime
- [JavaScript] 8.JS BOM对象
- JSESSIONID与SESSION
- JSESSIONID与SESSION
- js 验证表单 js提交验证类
- JavaScript中的setInterval用法
- [JavaScript] 7.JS JSON
- JavaScript+Java实现HTML页面转为PDF文件保存的方法