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 相关文章推荐
jQuery MD5加密实现代码
Mar 15 Javascript
input禁止键盘及中文输入,但可以点击
Feb 13 Javascript
JavaScript前补零操作实例
Mar 11 Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 Javascript
js实现简单div拖拽功能实例
May 12 Javascript
jQuery实现tab选项卡效果的方法
Jul 08 Javascript
详解基于angular路由的requireJs按需加载js
Jan 20 Javascript
node文件批量重命名的方法示例
Oct 23 Javascript
微信小程序中吸底按钮适配iPhone X方案
Nov 29 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 Javascript
通过GASP让vue实现动态效果实例代码详解
Nov 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删除非空目录的函数代码小结
2013/02/28 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
php时间戳转换代码详解
2019/08/04 PHP
php实现文件上传基本验证
2020/03/04 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
jQuery 使用手册(六)
2009/09/23 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
brook javascript框架介绍
2011/10/10 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
python打开网页和暂停实例
2014/09/30 Python
简洁的十分钟Python入门教程
2015/04/03 Python
Python实现合并字典的方法
2015/07/07 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
建筑专业毕业生推荐信
2013/11/21 职场文书
行政专员岗位职责
2014/01/02 职场文书
中秋节超市促销方案
2014/01/30 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
教研活动主持词
2015/07/03 职场文书
中秋节随笔
2015/08/15 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
Mysql忘记密码解决方法
2022/02/12 MySQL
nginx设置资源请求目录的方式详解
2022/05/30 Servers