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 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
window.location.href IE下跳转失效的解决方法
Mar 27 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
Feb 14 Javascript
去除html代码里面的script正则方法
May 19 Javascript
angularjs 中$apply,$digest,$watch详解
Oct 13 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
angular2 ng build部署后base文件路径问题详细解答
Jul 15 Javascript
通俗解释JavaScript正则表达式快速记忆
Aug 23 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
layui自定义插件citySelect实现省市区三级联动选择
Jul 26 Javascript
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
简单实现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设计模式 Proxy (代理模式)
2011/06/26 PHP
php下载文件的代码示例
2012/06/29 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
javascript的函数作用域
2014/11/12 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
教你用Python创建微信聊天机器人
2020/03/31 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python移位运算的实现
2019/07/15 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
生产内勤岗位职责
2013/12/07 职场文书
八年级数学教学反思
2014/01/31 职场文书
联谊活动总结范文
2015/05/09 职场文书
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技