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 相关文章推荐
A标签触发onclick事件而不跳转的多种解决方法
Jun 27 Javascript
javaScript 页面自动加载事件详解
Feb 10 Javascript
jQuery is()函数用法3例
May 06 Javascript
Node.js事件循环(Event Loop)和线程池详解
Jan 28 Javascript
javascript基础语法学习笔记
Jan 04 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
Jun 08 Javascript
javascript运算符——位运算符全面介绍
Jul 14 Javascript
js实现悬浮窗效果(支持拖动)
Mar 09 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 Javascript
js实现抽奖的两种方法
Mar 19 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
May 14 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
JS 类型转换常见方法小结
2010/05/31 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
js的对象与函数详解
2019/01/21 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
pandas实现选取特定索引的行
2018/04/20 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
2014年宣传思想工作总结
2014/12/10 职场文书
商务英语求职信范文
2015/03/19 职场文书
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js