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在指定DIV加载HTML示例代码
Feb 17 Javascript
jquery禁用右键单击功能屏蔽F5刷新
Mar 17 Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 Javascript
微信小程序  Mustache语法详细介绍
Oct 27 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
Apr 17 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 Javascript
React BootStrap用户体验框架快速上手
Mar 06 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 Javascript
Windows上node.js的多版本管理工具用法实例分析
Nov 06 Javascript
javascript实现获取中文汉字拼音首字母
May 19 Javascript
javascript this指向相关问题及改变方法
Nov 19 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
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
laravel自定义分页效果
2017/07/23 PHP
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
JS的数组迭代方法
2015/02/05 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
Python判断直线和矩形是否相交的方法
2015/07/14 Python
基于Python os模块常用命令介绍
2017/11/03 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
python字符串常用方法
2018/06/14 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
请解释在new与override的区别
2012/10/29 面试题
前处理班长职位说明书
2014/03/01 职场文书
财务负责人岗位职责
2015/02/03 职场文书
2015年保管员工作总结
2015/04/30 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
六年级语文教学反思
2016/03/03 职场文书
Django程序的优化技巧
2021/04/29 Python
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis