原生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 相关文章推荐
IE6下JS动态设置图片src地址问题
Jan 08 Javascript
简单的代码实现jquery定时器
Nov 17 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
javascript实现倒计时跳转页面
Jan 17 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
Dec 15 Javascript
简单三步实现报表页面集成天气
Dec 15 Javascript
用jquery的attr方法实现图片切换效果
Feb 05 Javascript
Angular2整合其他插件的方法
Jan 20 Javascript
Vue自定义指令实现checkbox全选功能的方法
Feb 28 Javascript
微信小程序基于Taro的分享图片功能实践详解
Jul 12 Javascript
vue中监听返回键问题
Aug 28 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
Feb 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
一个程序下载的管理程序(四)
2006/10/09 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
浅析从vue源码看观察者模式
2018/01/29 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
python中zip和unzip数据的方法
2015/05/27 Python
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
关于运动会的口号
2014/06/07 职场文书
学校国庆节活动总结
2015/03/23 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server