基于JS实现无缝滚动思路及代码分享


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>

以上所述是小编给大家分享的基于JS实现无缝滚动思路及代码,希望能够帮助到大家,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS特殊函数(Function()构造函数、函数直接量)区别介绍
May 19 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
Apr 06 Javascript
JavaScript简单下拉菜单实例代码
Sep 07 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
Jul 05 Javascript
javascript代码调试之console.log 用法图文详解
Sep 30 Javascript
JS 调用微信扫一扫功能
Dec 22 Javascript
将angular.js项目整合到.net mvc中的方法详解
Jun 29 Javascript
Vue.js搭建移动端购物车界面
Jun 28 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
vue如何实现自定义底部菜单栏
Jul 01 Javascript
js实现三角形粒子运动
Sep 22 Javascript
video.js添加自定义组件的方法
Dec 09 Javascript
Bootstrap学习笔记之css样式设计(1)
Jun 07 #Javascript
jQuery hover事件简单实现同时绑定2个方法
Jun 07 #Javascript
PassWord输入框代码分享
Jun 07 #Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 #Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 #Javascript
JavaScript数组的定义及数字操作技巧
Jun 06 #Javascript
浅析$.getJSON异步请求和同步请求
Jun 06 #Javascript
You might like
打造计数器DIY三步曲(下)
2006/10/09 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
jquery获得option的值和对option进行操作
2013/12/13 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
详解Python的Django框架中的模版继承
2015/07/16 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
Flask-Mail用法实例分析
2018/07/21 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
技校生自我鉴定
2013/12/08 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
工作会议欢迎词
2014/01/16 职场文书
关于赌博的检讨书
2014/01/24 职场文书
仓库主管岗位职责
2014/03/02 职场文书
司机职责范本
2014/03/08 职场文书
交通事故调解协议书
2014/04/16 职场文书
篮球社团活动总结
2014/06/27 职场文书
新兵入伍心得体会
2014/09/04 职场文书
演讲开场白台词大全
2015/05/29 职场文书
2019年入党思想汇报
2019/03/25 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript