原生js实现中奖信息无间隙滚动效果


Posted in Javascript onJanuary 18, 2017

知识要点

1.实现原理:通过定时器不断改变列表的top值。而达到无间隙滚动就要对信息列表复制一份,再判断两个列表的top临界值初始化。最后注意的就是 防止动画积存需要对定时器进行清除。

2.用到的属性方法:

setInterval() //每隔一定时间执行一次函数,可以无限执行下去
clearInterval() //清除指定的setInterval
setTimeout() //经过一定时间执行一次函数,只能执行一次,如果要无限下去需要在函数里自行设置
clearTimeout() //清除指定的setTimeout

剩下的就是一些基础的dom操作

完整代码

注:因为看到了天猫积分的抽奖页面所以想自己写试试,审查天猫代码看到原理是改变列表top值,无缝滚动是自己瞎琢磨的,估计应该有更高效的方法还请大神指教。。

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>demo</title>
<style>
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{margin:0;padding:0;}
h1,h2,h3,h4,h5,h6{font-size:100%;}
address,cite,dfn,em,var{font-style:normal;}
code,kbd,pre,samp{font-family:courier new,courier,monospace;}
ul,ol{list-style:none;}
a{text-decoration:none;}
a:hover{text-decoration:none;}
sup{vertical-align:text-top;}
sub{vertical-align:text-bottom;}
legend{color:#000;}
fieldset,img{border:0;}
button,input,select,textarea{font-size:100%;}
table{border-collapse:collapse;border-spacing:0;}
.clear{clear: both;float: none;height: 0;overflow: hidden;}
.title{background: #D20F25; width: 200px; height: 40px; color: #fff; line-height: 40px;}
.title p{margin-left: 30px;}
#vip{background: #D20F25; width: 200px; height: 105px; color: #FF92AD; overflow: hidden; position: relative; }
#list{position: absolute;}
#vip li{ height: 50px; line-height: 24px; font-size: 12px; margin-left: 30px; }
</style>
</head> 
<body>
 <div class="title"><p>会员中奖榜</p></div>
 <div id="vip">
 <ul id="list" style="top: 0px;">
 <li>m**b<br/>抽中18积分</li>
 <li>小**宫<br/>抽中28积分</li>
 <li>金**告<br/>抽中8积分</li>
 <li>真**生<br/>抽中88积分</li>
 <li>郑**9<br/>抽中18积分</li>
 <li>l**美<br/>抽中8积分</li>
 </ul> 
 </div>
 <script type="text/javascript">
 //在页面加载完后立即执行多个函数方案
 function addloadEvent(func){
  var oldonload=window.onload;
  if(typeof window.onload !="function"){
   window.onload=func;
  }
  else{
   window.onload=function(){
    if(oldonload){
     oldonload(); 
    }
    func();
   }
  }
 }
 //在页面加载完后立即执行多个函数方案结束
 addloadEvent(nes);
 function nes(){
 //获取列表父容器
 var vip=document.getElementById("vip");
 //获取信息列表
 var list=document.getElementById("list");
 //创建第二个列表设置一系列样式id等
 var list1=document.createElement("ul");
  list1.setAttribute("id","list1");
  //初始位置为300正好在第一个列表的下面
  list1.style.top=300+"px";
  list1.style.position="absolute";
  //插入文档流
  vip.appendChild(list1);
  //把第一个列表的结构内容复制给第二个
  list1.innerHTML=list.innerHTML;
 //第一个列表
 function b(){
  //top值为当前的top减10   
  list.style.top=parseInt(list.style.top)-10+"px";
  //如果top值为-300那么初始化top
  if(parseInt(list.style.top)==-300){  
  list.style.top=0;
  }
  //这里是实现间隔滚动判断
  //当top值整除50(每个li的高度)时候清除定时器  
  if(parseInt(list.style.top)%50==0){
  clearInterval(time);
  //然后两秒后再次执行time=setInterval
  se=setTimeout(function(){time=setInterval(b,30);},2000);  
  }     
 };
 //定时器
 time=setInterval(b,30); 
 //第二个列表与第一个列表操作一样,只是修改了高度
 function c(){  
  list1.style.top=parseInt(list1.style.top)-10+"px";
  if(parseInt(list1.style.top)==0){
  list1.style.top=300+"px";
  }
  if(parseInt(list1.style.top)%50==0){
  clearInterval(time1);
  se1=setTimeout(function(){time1=setInterval(c,30);},2000);
  }
 };
 time1=setInterval(c,30); 
 //鼠标移入列表时 清除两个定时器
 vip.onmouseover=function(){  
  clearTimeout(se);
  clearTimeout(se1);
  clearInterval(time);
  clearInterval(time1);
 };
 //鼠标划出时先判断如果定时器在执行则清除
 vip.onmouseout=function(){
  if(time&&time1) {
  clearInterval(time);
  clearInterval(time1)
  }
  if(se&&se1) {
  clearTimeout(se);
  clearTimeout(se1)
  }
  //再次执行定时器
  se=setTimeout(function(){time=setInterval(b,30);},2000); 
  se1=setTimeout(function(){time1=setInterval(c,30);},2000); 
 }; 
 } 
 </script>
</body> 
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
解决jQuery插件tipswindown与hintbox冲突
Nov 05 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
选择器中含有空格在使用示例及注意事项
Jul 31 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 Javascript
浅析jQuery Mobile的初始化事件
Dec 03 Javascript
JavaScript提高加载和执行效率的方法
Feb 03 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
angularJS实现动态添加,删除div方法
Feb 27 Javascript
Three.JS实现三维场景
Dec 30 Javascript
Vue 使用formData方式向后台发送数据的实现
Apr 14 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
Oct 08 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
Nov 12 Javascript
js实现简单的网页换肤效果
Jan 18 #Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
Jan 18 #Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
Jan 18 #Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 #Javascript
js实现消息滚动效果
Jan 18 #Javascript
利用Vue.js实现checkbox的全选反选效果
Jan 18 #Javascript
微信小程序的动画效果详解
Jan 18 #Javascript
You might like
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
jQuery live
2009/05/15 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
Python通过命令开启http.server服务器的方法
2017/11/04 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
学校消防安全制度
2014/01/30 职场文书
司机检讨书
2014/02/13 职场文书
治安消防安全责任书
2014/07/23 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
员工年终考核评语
2014/12/31 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书