ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascript スキルに実装されたシンプルなタイマー

javascript_javascript スキルに実装されたシンプルなタイマー

WBOY
WBOYオリジナル
2016-05-16 15:49:441314ブラウズ

私は最近、雪の結晶、賞品を獲得するための期間限定のクリック、期間限定のパズル、期間限定の質問など、WeChat 上で多くのインタラクティブなミニゲームを作成しました。これらはすべて期間限定の「ゲーム」です。 ' (実際にはゲームとはみなされていません。せいぜいちょっと面白い程度です) ほんのちょっとしたやり取りです)

上記には制限時間が 4 つあります。はい、そうです。ここに記録されるのは、最近書き込まれた「タイマー」です...

タイマーは 1 つの setInterval または setTimeout で実装でき、コードは 10 行を超えません。

しかし、トラブルを探す気持ちで再利用可能なタイマーを作成してみてはいかがでしょうか?

1. カウントダウンとカウントフォワードが可能

2. 機能のリセット、一時停止、停止、開始

//计时器
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&#63;--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メソッドは、カウンターで計算した現在時刻をeleに書き込む前の文字列処理です

カウントダウンがカウントダウンであっても、デフォルトは前進です

timerO.timeV を通じて現在時刻を取得できます

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。