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 相关文章推荐
ExtJS Window 最小化的一种方法
Nov 18 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 Javascript
倒记时60刷新网页的js代码
Feb 18 Javascript
js获取视频时长代码
Apr 10 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
Feb 12 Javascript
AngularJS实现tab选项卡的方法详解
Jul 05 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
angular 实时监听input框value值的变化触发函数方法
Aug 31 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
关于vue-cli3打包代码后白屏的解决方案
Sep 02 Javascript
vue 数据双向绑定的实现方法
Mar 04 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
javascript import css实例代码
2008/07/18 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
微信小程序入门教程
2016/11/18 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
微信小程序实现图片放大预览功能
2020/10/22 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
python列表list保留顺序去重的实例
2018/12/14 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Keras 使用 Lambda层详解
2020/06/10 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
成考报名单位证明范本
2014/01/16 职场文书
司机辞职报告范文
2014/01/20 职场文书
工作自我评价怎么写
2014/01/29 职场文书
残疾人创业典型事迹
2014/02/01 职场文书
公益广告宣传方案
2014/02/28 职场文书
公司承诺书格式
2014/05/21 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
婚内分居协议书范文
2014/11/26 职场文书
2014年公路养护工作总结
2014/12/04 职场文书