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 相关文章推荐
点击按钮或链接不跳转只刷新页面的脚本整理
Oct 22 Javascript
原生JS实现加入收藏夹的代码
Oct 24 Javascript
ExtJS自定义主题(theme)样式详解
Nov 18 Javascript
JS替换字符串中空格方法
Apr 17 Javascript
jquery实现多屏多图焦点图切换特效的方法
May 04 Javascript
Javascript实现网络监测的方法
Jul 31 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
Sep 20 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
微信小程序自定义底部弹出框功能
Nov 18 Javascript
全面解析js中的原型,原型对象,原型链
Jan 25 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
解析php中memcache的应用
2013/06/18 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
PHP goto语句用法实例
2019/08/06 PHP
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
javascript动画浅析
2012/08/30 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
layui实现给某一列加点击事件
2019/10/26 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
在Python中使用成员运算符的示例
2015/05/13 Python
python操作 hbase 数据的方法
2016/12/18 Python
python求质数的3种方法
2018/09/28 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
详解Python多线程下的list
2020/07/03 Python
什么是Python包的循环导入
2020/09/08 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
美国创意之家:BulbHead
2017/07/12 全球购物
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
保护环境倡议书
2014/04/14 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
黄山导游词
2015/01/31 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
nginx之queue的具体使用
2022/06/28 Servers
nginx静态资源的服务器配置方法
2022/07/07 Servers