无缝滚动的简单实现代码(推荐)


Posted in Javascript onJune 07, 2016

原理:

1.给ul一个绝对定位使其脱离文档流,left设置为0,把图片塞进ul里,编写一个“移动"函数,函数功能能够使ul的left以一个正速度向右跑动,

2.设置一个定时器,让"移动"函数每30(参数可变)毫秒执行一次

3.因为ul的长度会“跑”完,此时可以使ul的content也就是img增加一倍,

oUl.innerHTML +=oUl.innerHTML;

4.此时因为ul的content增加,其width也会随着增大,根据实际项目展示图片数量可能改动或不确定性,

oUl.style.width = oLi.length*oLi[0].offsetWidth+'px';

5.往“移动”函数里增添代码。

5.1此时ul向右移动,判断当ul的offsetLeft>0时,把ul向左拉“一半ul的宽度”,也就是使ul能够向右一直无限制移动

if(oUl.offsetLeft>0){
     oUl.style.left = -oUl.offsetWidth/2+'px';
}

5.2当ul向左移动,其offsetLeft跑了ul一半的宽度时,把整个ul拉回至初始的left:0;

if (oUl.offsetLeft<-oUl.offsetWidth/2) {
      oUl.style.left = 0; 
}

上代码:

html:

<div id="box">
    <ul>
      <li><a href="#"><img src="1.jpg" /></a></li>
      <li><a href="#"><img src="2.jpg" /></a></li>
      <li><a href="#"><img src="3.jpg" /></a></li>
      <li><a href="#"><img src="4.jpg" /></a></li>
    </ul>
 </div>

css:

* {margin: 0;padding: 0;}
   #box{ width: 480px; height: 110px; border: 1px red solid; margin: 100px auto;overflow: hidden; position: relative; }
   #box ul{ position: absolute; left: 0; top: 5px;}
   #box ul li{list-style: none; float: left; width: 100px; height: 100px; padding-left: 16px; }
   #box ul li img{width: 100px; height: 100px;}

js:

<script>
         window.onload = function(){
             var oDiv = document.getElementById('div1');
             var oUl = oDiv.getElementsByTagName('ul')[0];
             var oLi = oUl.getElementsByTagName('li');
             var aA = document.getElementsByTagName('a');
             var iSpeed = 10;      //让ul开始就具有一个速度走动  
             
              oUl.innerHTML +=oUl.innerHTML;  
              oUl.style.width = oLi.length*oLi[0].offsetWidth+'px';  
                aA[0].onclick = function(){
                      iSpeed = -10;
               };
                aA[1].onclick = function(){
                      iSpeed = 10;
               };

               function fnMove(){
                   if (oUl.offsetLeft<-oUl.offsetWidth/2) {   //负数是因为ul的left是负数  
                     

oUl.style.left = 0;
                       }

                   else if(oUl.offsetLeft>0){
                         oUl.style.left = -oUl.offsetWidth/2+'px';     
                      }                
                    
                     oUl.style.left = oUl.offsetLeft+iSpeed+'px';    //整个ul向右移动      
                  
               };

                 var timer = null;             
                 clearInterval(timer);
                 timer = setInterval(fnMove,30);

                 oUl.onmouseover = function(){
                    clearInterval(timer);
                 };
                 oUl.onmouseout = function(){
                    timer = setInterval(fnMove,30); //当鼠标移开的时候执行这个定时器

                 };
            
         };
      </script>

如有错误,欢迎指正。

以上这篇无缝滚动的简单实现代码(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript使用prototype定义对象类型
Feb 07 Javascript
jqPlot jquery的页面图表绘制工具
Jul 25 Javascript
javascript小数四舍五入多种方法实现
Dec 23 Javascript
node.js中的fs.close方法使用说明
Dec 17 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
javaScript 逻辑运算符使用技巧整理
May 03 Javascript
ReactJs设置css样式的方法
Jun 08 Javascript
bootstrap datetimepicker控件位置异常的解决方法
Nov 23 Javascript
React 源码中的依赖注入方法
Nov 07 Javascript
vue cli使用融云实现聊天功能的实例代码
Apr 19 Javascript
JS实现简单的表格增删
Jan 16 Javascript
JavaScript 类的封装操作示例详解
May 16 Javascript
Bootstrap学习笔记之css样式设计(2)
Jun 07 #Javascript
AngularJS 如何在控制台进行错误调试
Jun 07 #Javascript
JQuery异步加载PartialView的方法
Jun 07 #Javascript
基于JS实现无缝滚动思路及代码分享
Jun 07 #Javascript
Bootstrap学习笔记之css样式设计(1)
Jun 07 #Javascript
jQuery hover事件简单实现同时绑定2个方法
Jun 07 #Javascript
PassWord输入框代码分享
Jun 07 #Javascript
You might like
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
python快速查找算法应用实例
2014/09/26 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
利用Python检测URL状态
2019/07/31 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
python中有帮助函数吗
2020/06/19 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
电大自我鉴定范文
2013/10/01 职场文书
五一劳动节活动记录
2014/03/23 职场文书
阳光体育活动总结
2014/04/30 职场文书
体操比赛口号
2014/06/10 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书