JavaScript实现的一个倒计时的类


Posted in Javascript onMarch 12, 2015

近期在做排列五的彩票项目,每一期都有购彩时段,即用户打开这个排列五的页面时,会从服务器传来一个remaintime(离本次彩期结束的剩余时间),然后这个时间在客户端递减呈现给用户看,让用户获得本次彩期的剩余时间。

实现原理挺简单的,在此不在赘述,运行以下代码查看demo:

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>index</title>
<style type="text/css">
em{color:#f00;}
</style>
</head>

<body>
<div id="remaintime"></div>
<script type="text/javascript">

var TheTime = function(){
 this.init.apply(this,arguments);
};

TheTime.prototype = {
 init: function(obj){
 var that = this;
 obj = that.buildParam(obj);
 that.callback = obj.callback;
 var container = that.container = document.getElementById(obj.container);
 container.innerHTML = '<em></em>小时<em></em>分钟<em></em>秒';
 var hourSpace = that.hourSpace = container.getElementsByTagName('em')[0];
 var minuteSpace = that.minuteSpace = container.getElementsByTagName('em')[1];
 var secondSpace = that.secondSpace = container.getElementsByTagName('em')[2];
 if(obj.remaintime==0){
  that.resetTime();
  return;
 }

 that.hours = Math.floor(obj.remaintime/3600);
 that._remainder1 = obj.remaintime % 3600;
 that.minutes = Math.floor(that._remainder1/60);
 that.seconds = that._remainder1 % 60;
 var timer = that.timer = setInterval(function(){
  that.renderTime.apply(that);
 },1000);
 },
 buildParam: function(obj){
 obj = {
  //container为dom节点的id
  container: obj.container || 'container',
  remaintime: Number(obj.remaintime) || 0,
  //倒计时完成后的回调
  callback: obj.callback || new Function
 };
 return obj;
 },
 resetTime: function(){
 var that = this;
 that.container.innerHTML = "已经截止";
 },
 //刷新时间
 renderTime: function(){
 //debugger;
 var that = this;
 if(that.seconds>0){
  that.seconds--;
 }else{
  that.seconds = 59;
  if(that.minutes>0){
  that.minutes--;
  }else{
  that.minutes = 59;
  if(that.hours>0){
   that.hours--;
  }
  }
 }
 
 //时刻监听
 if(that.hours==0 && that.minutes==0 && that.seconds==0){
  //执行回调
  that._callback();
 }
 var bitHandle = that.bitHandle;

 var _hour = bitHandle(that.hours);
 var _minute = bitHandle(that.minutes);
 var _second = bitHandle(that.seconds);
 that.hourSpace.innerHTML = _hour;
 that.minuteSpace.innerHTML = _minute;
 that.secondSpace.innerHTML = _second;
 },
 //对于位数的处理,确保返回两位数
 bitHandle: function(num){
 var str = num.toString();
 if(str.length<2){
  str = 0 + str;
 }
 return str;
 },
 _callback: function(){
 var that = this;
 clearInterval(that.timer);
 that.callback();
 }

};

new TheTime({
 //容器id
 container: 'remaintime',
 //服务器返回的剩余时间,单位为秒
 remaintime: 10000,
 //倒计时完成时的回调
 callback: function(){
 document.getElementById('remaintime').innerHTML = '已截止';
 }
});
</script>
</body>
</html>
Javascript 相关文章推荐
一实用的实现table排序的Javascript类库
Sep 12 Javascript
js获得页面的高度和宽度的方法
Feb 23 Javascript
js转化毫秒为时间格式代码
Apr 10 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
Apr 15 Javascript
js匿名函数的调用示例(形式多种多样)
Aug 20 Javascript
基于Vue.js的表格分页组件
May 22 Javascript
jQuery插件form-validation-engine正则表达式操作示例
Feb 09 Javascript
使用axios实现上传图片进度条功能
Dec 21 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
jQuery实现模拟搜索引擎的智能提示功能简单示例
Jan 27 jQuery
在vue-cli3中使用axios获取本地json操作
Jul 30 Javascript
JS不要再到处使用绝对等于运算符了
Apr 30 Javascript
JavaScript将XML转成JSON的方法
Mar 12 #Javascript
JavaScript中诡异的delete操作符
Mar 12 #Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
Mar 12 #Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 #Javascript
JavaScript设计模式学习之“类式继承”
Mar 12 #Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
Mar 12 #Javascript
JavaScript中return false的用法
Mar 12 #Javascript
You might like
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
硕士研究生个人求职信
2013/12/04 职场文书
大学生自荐信
2013/12/11 职场文书
六十岁生日答谢词
2014/01/10 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
党员年度个人总结
2015/02/14 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
Mysql开启外网访问
2022/05/15 MySQL