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 相关文章推荐
删除重复数据的算法
Nov 23 Javascript
AutoSave/自动存储功能实现
Mar 24 Javascript
Open and Print a Word Document
Jun 15 Javascript
传智播客学习之JavaScript基础篇
Nov 13 Javascript
如何使用jquery动态加载js,css文件实现代码
Apr 03 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
Aug 02 Javascript
jquery放大镜效果超漂亮噢
Nov 15 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
Dec 27 Javascript
浅析javascript操作 cookie对象
Dec 26 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
vue项目实现图片上传功能
Dec 23 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 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数据库连接类~~做成一个分页类!
2006/11/25 PHP
php md5下16位和32位的实现代码
2008/04/09 PHP
怎样去阅读一份php源代码
2009/08/21 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
python3.8下载及安装步骤详解
2020/01/15 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
什么是反射
2012/03/17 面试题
商务英语专业毕业生自荐信
2013/11/05 职场文书
简历自荐信
2013/12/02 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
会计试用期自我评价
2014/09/19 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
普通党员个人整改措施
2014/10/27 职场文书
见习报告的格式
2014/10/31 职场文书
党员公开承诺书2015
2015/01/21 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
紧急通知
2015/04/17 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Python中tqdm的使用和例子
2022/09/23 Python