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添加重载函数的辅助方法
Jul 04 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
基于jquery的跟随屏幕滚动代码
Jul 24 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
Oct 17 Javascript
JS中用try catch对代码运行的性能影响分析
Dec 26 Javascript
使用vue.js实现联动效果的示例代码
Jan 10 Javascript
vue实现todolist单页面应用
Apr 11 Javascript
模块化react-router配置方法详解
Jun 03 Javascript
小程序实现短信登录倒计时
Jul 12 Javascript
es6中reduce的基本使用方法
Sep 10 Javascript
jQuery实现鼠标拖拽登录框移动效果
Sep 13 jQuery
简单实现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中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
用jscript实现新建word文档
2007/06/15 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
实例教学如何写vue插件
2017/11/30 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
Python单例模式实例分析
2015/01/14 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Python实现微信机器人的方法
2019/09/06 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
公司营业员的工作总结自我评价
2013/10/05 职场文书
运动会开幕式解说词
2014/02/05 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
驳回起诉裁定书
2015/05/19 职场文书
公司备用金管理制度
2015/08/04 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
你会写请假条吗?
2019/06/26 职场文书
详解SQL的窗口函数
2022/04/21 Oracle