本文介绍一个基于JavaScript实现的轻量级计时器组件。该组件封装了setInterval逻辑,支持顺计时与倒计时两种模式,并提供启动、暂停、停止及复位功能。通过配置ele、startT、endT等参数,开发者可快速集成到微信互动游戏或限时活动中,代码简洁且易于复用。
背景与需求分析
近期开发了大量移动端互动小游戏,例如飘雪花、限时点击赢取奖品、限时拼图以及限时答题等。这些项目本质上属于限时互动环节,虽算不上完整游戏,但具备一定的娱乐属性。
上面出现了4个限时,对,没错,这里记录的就是最近写的 ‘计时器' ...
实现一个基础计时器仅需使用setInterval或setTimeout,代码量通常不超过十行。
计时器功能设计
然而,为了提升代码复用性,我们尝试编写一个更完善的计时器组件。
该组件需支持两种模式:倒计时与顺计时。
同时具备复位、暂停、停止和启动四项核心功能。
核心代码实现
//计时器
window.timer = (function(){
function mod(opt){
//可配置参数 都带有默认值
//必选参数
this.ele = typeof(opt.ele)=='string'?document.getElementById(opt.ele):opt.ele;//元素
//可选参数
this.startT = opt.startT||0;//时间基数
this.endT = opt.endT=='undefined'?24*60*60:opt.endT;//结束时间 默认为一天
this.setStr = opt.setStr||null;//字符串拼接
this.countdown = opt.countdown||false;//倒计时
this.step = opt.step||1000;
//不可配置参数
this.timeV = this.startT;//当前时间
this.startB = false;//是否启动了计时
this.pauseB = false;//是否暂停
this.init();
}
mod.prototype = {
constructor : 'timer',
init : function(){
this.ele.innerHTML = this.setStr(this.timeV);
},
start : function(){
if(this.pauseB==true||this.startB == true){
this.pauseB = false;
return;
}
if(this.countdown==false&&this.endT<=this.cardinalNum){
return false;
}else if(this.countdown==true&&this.endT>=this.startT){
return false;
}
this.startB = true;
var v = this.startT,
this_ = this,
anim = null;
anim = setInterval(function(){
if(this_.startB==false||v==this_.endT){clearInterval(anim);return false}
if(this_.pauseB==true)return;
this_.timeV = this_.countdown?--v:++v;
this_.ele.innerHTML = this_.setStr(this_.timeV);
},this_.step);
},
reset : function(){
this.startB = false;
this.timeV = this.startT;
this.ele.innerHTML = this.setStr(this.timeV);
},
pause : function(){
if(this.startB == true)this.pauseB = true;
},
stop : function(){
this.startB = false;
}
}
return mod;
})();
具体调用方式如下所示。
调用示例与参数说明
var timerO_1 = new timer({
ele : 'BOX1',
startT : 0,
endT : 15,
setStr : function(num){
return num+'s';
}
});
var timerO_2 = new timer({
ele : 'BOX2',
startT : 30,
endT : 0,
countdown : true,
step : 500,
setStr : function(num){
return num+'s';
}
});
其中传入的setStr方法用于处理当前时间数值在写入指定元素前的字符串格式化逻辑。
countdown参数用于指定是否为倒计时模式,默认值为顺计时。
开发者可通过timerO.timeV属性实时获取当前计时器的时间数值。
以上即为本文关于该计时器实现的全部内容,希望能为读者提供有益参考。