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 图片延迟加载并等比缩放插件
Nov 09 Javascript
页面右下角弹出提示框示例代码js版
Aug 02 Javascript
JavaScript 垃圾回收机制分析
Oct 10 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
Node.js实现兼容IE789的文件上传进度条
Sep 02 Javascript
Jquery Easyui表单组件Form使用详解(30)
Dec 19 Javascript
Ajax 加载数据 练习代码
Jan 05 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
Sep 02 Javascript
jQuery实现右侧抽屉式在线客服功能
Dec 25 jQuery
vuex state及mapState的基础用法详解
Apr 19 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 Javascript
小程序如何获取多个formId实现详解
Sep 20 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
基于文本的留言簿
2006/10/09 PHP
PHP 金额数字转换成英文
2010/05/06 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
Python 字典与字符串的互转实例
2017/01/13 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
python框架中flask知识点总结
2018/08/17 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
物流仓储实习自我鉴定
2013/09/25 职场文书
大专应届生个人的自我评价
2013/11/21 职场文书
档案管理员岗位职责
2013/12/01 职场文书
网吧收银员岗位职责
2013/12/14 职场文书
我的求职择业计划书
2014/04/04 职场文书
小学评语大全
2014/04/22 职场文书
学党史心得体会
2014/09/05 职场文书
高中班主任寄语
2019/06/21 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle