基于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 相关文章推荐
表单内同名元素的控制
Nov 22 Javascript
js textarea自动增高并隐藏滚动条
Dec 16 Javascript
UserData用法总结 lanyu出品
Jul 01 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
Jul 04 Javascript
jquery和js实现对div的隐藏和显示方法
Sep 26 Javascript
jQuery Validate初步体验(二)
Dec 12 Javascript
jQuery操作iframe中js函数的方法小结
Jul 06 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
使用p5.js临摹动态图形
Oct 23 Javascript
vue中对象数组去重的实现
Feb 06 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 Javascript
Vite + React从零开始搭建一个开源组件库
Jun 25 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
php异常处理技术,顶级异常处理器
2012/06/13 PHP
smarty表格换行实例
2014/12/15 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
告诉大家什么是JSON
2008/06/10 Javascript
JavaScript 三种创建对象的方法
2009/10/16 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
python得到windows自启动列表的方法
2018/10/14 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
关于礼仪的演讲稿
2014/01/04 职场文书
负责人任命书范本
2014/06/04 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android