原生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 相关文章推荐
JS去除字符串的空格增强版(可以去除中间的空格)
Aug 26 Javascript
不安全的常用的js写法
Sep 15 Javascript
JQuery实现用户名无刷新验证的小例子
Mar 22 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
Dec 13 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
javascript判断变量是否有值的方法
Apr 20 Javascript
简介JavaScript中的setHours()方法的使用
Jun 11 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
Mar 10 Javascript
JS实现输入框提示文字点击时消失效果
Jul 19 Javascript
jquery 抽奖小程序实现代码
Oct 12 Javascript
Vue.js结合bootstrap实现分页控件
Mar 10 Javascript
Vue实例中生命周期created和mounted的区别详解
Aug 25 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
星际中的相关伤害
2020/03/04 星际争霸
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
javascript写的一个链表实现代码
2009/10/25 Javascript
javascript Window及document对象详细整理
2011/01/12 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
Python3 修改默认环境的方法
2019/02/16 Python
python 求定积分和不定积分示例
2019/11/20 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
django使用graphql的实例
2020/09/02 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
彪马日本官网:PUMA日本
2019/01/31 全球购物
开办化妆品公司创业计划书
2013/12/26 职场文书
竞聘书格式及范文
2014/03/31 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
综合实践活动报告
2015/02/05 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书