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 相关文章推荐
URL编码转换,escape() encodeURI() encodeURIComponent()
Dec 27 Javascript
jquery动态增加text元素以及删除文本内容实例代码
Jul 01 Javascript
jquery改变disabled的boolean状态的三种方法
Dec 13 Javascript
javascript中数组的sort()方法的使用介绍
Dec 18 Javascript
使用jQuery在对象中缓存选择器的简单方法
Jun 30 Javascript
JavaScript数组去重的3种方法和代码实例
Jul 01 Javascript
JS实现的表格行鼠标点击高亮效果代码
Nov 27 Javascript
jquery获取下拉框中的循环值
Feb 08 Javascript
AngularJS中重新加载当前路由页面的方法
Mar 09 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
Sep 21 Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 Javascript
javascript实现京东登录显示隐藏密码
Aug 02 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
twig模板常用语句实例小结
2016/02/04 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
Date对象格式化函数代码
2010/07/17 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
python使用socket进行简单网络连接的方法
2015/04/29 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
基于python实现简单日历
2018/07/28 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
结婚保证书范文
2014/04/29 职场文书
室内设计专业自荐信
2014/05/31 职场文书
校庆标语集锦
2014/06/25 职场文书
教师自查自纠材料
2014/10/14 职场文书
《花钟》教学反思
2016/02/17 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server