JavaScript实现可复用计时器:支持倒计时与顺计时

作者:异步漫步时间:2026-10-29 12:33:10浏览:540

本文介绍一个基于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属性实时获取当前计时器的时间数值。

以上即为本文关于该计时器实现的全部内容,希望能为读者提供有益参考。

作者最新文章