JS无缝滚动效果实现方法分析


Posted in Javascript onDecember 21, 2016

本文实例讲述了JS无缝滚动效果实现方法。分享给大家供大家参考,具体如下:

JS无缝滚动效果实现方法分析

效果:

1.默认缓慢往左滚动

2.放到左箭头上还是向左滚动,放到右箭头上向右滚动

3.放到图片上停止滚动,移出继续滚动

思路:

1.计算图片列表ul的宽度

2.开启定时器,使其向左边距不断增大,造成向左运动的效果

3.图片列表复制一份,向左移动时,当左边距大于一份的宽度时,把它的左边距拉回到0。向右移动时,当左边距大于0时,把它的左边距拉到整个两份图片列表一半的宽度(即一份的宽度)。(拉的瞬间很快,用户察觉不到,造成一种无缝滚动的假象)

4.offsetLeft值的正负决定往哪边移动

5.放到图片上停止这个定时器,移开再开启

window.onload=function(){
 var odiv=document.getElementById('div');
 var oul=odiv.getElementsByTagName('ul')[0];
 var oli=oul.getElementsByTagName('oul');
 var btn=document.getElementsByTagName('btn');
 var ispeed=-1;
 var timer=null;
 oul.innerHTML+=oul.innerHTML; //图片列表复制一份
 oul.style.width=oli[0].offsetWidth*oli.length+'px'; //不算出ul的宽度的话,运动过程中后面的会先出现再加载图片,有一种不流畅感,切图片过多会分行,由外面的div决定宽度
 timer=setInterval(function(){
  oul.style.left=oul.offsetLeft+ispeed+'px';  //offsetLeft输出的是数字不带单位,右边也用oul.style.left输出的是字符串,而不是数值,而且它取得是行间样式,无用
  if(oul.offsetLeft<-oul.offsetWidth/2){ //判断时也可以用.style.left或.style.width?(不确定)
   oul.style.left=0;
  }
  else if(oul.offsetLeft>0){
   oul.style.left=-oul.offsetWidth/2;
  }
 ),30};
 btn[0].onmouseover=function(){
  ispeed=-1;
 };
 btn[1].onmouseover=function(){
  ispeed=1;
 };
 oul.onmouseover=function(){
  clearInterval(timer);
 };
 oul.onmouseout=function(){
  timer=setInterval(function(){
   oul.style.left=oul.offsetLeft+ispeed+'px';
   if(oul.offsetLeft<-oul.offsetWidth/2){
    oul.style.left=0;
   }
   else if(oul.offsetLeft>0){
    oul.style.left=-oul.offsetWidth/2;
   }
  ),30}; //如果把速度变大,而定时器的时间也变大是否可以达到相同效果呢?答案是不能。会变成一卡一卡
 };
};

注:这样子取得的宽度是不包含margin的,所以图片间边距的写法可以是li的宽度大于img的宽度,li的宽度-img的宽度,就是两边的边距和

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
Javascript Math对象
Aug 13 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 Javascript
BootStrap实现鼠标悬停下拉列表功能
Feb 17 Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
Jul 25 Javascript
使用异步组件优化Vue应用程序的性能
Apr 28 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 10 Javascript
微信小程序监听用户登录事件的实现方法
Nov 11 Javascript
Vue父子之间值传递的实例教程
Jul 02 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 Javascript
微信小程序中wxs文件的一些妙用分享
Feb 18 Javascript
简单实现JS计算器功能
Dec 21 #Javascript
jQuery实现立体式数字滚动条增加效果
Dec 21 #Javascript
Bootstrap Search Suggest使用例子
Dec 21 #Javascript
简单实现Bootstrap标签页
Aug 09 #Javascript
获取JavaScript异步函数的返回值
Dec 21 #Javascript
bootstrap实现图片自动轮播
Dec 21 #Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
Dec 21 #Javascript
You might like
php数组中删除元素的实现代码
2012/06/22 PHP
PHP生成压缩文件实例
2015/02/07 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
python列表操作实例
2015/01/14 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
局域网标准
2016/09/10 面试题
颁奖晚会主持词
2014/03/25 职场文书
小学生新年寄语
2014/04/03 职场文书
幼儿发展评估方案
2014/06/11 职场文书
综合素质评价自我评价
2015/03/06 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
我去timi了,一起去timi是什么意思?
2022/04/13 杂记
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android