Maison  >  Article  >  interface Web  >  Minuterie simple implémentée dans les compétences javascript_javascript

Minuterie simple implémentée dans les compétences javascript_javascript

WBOY
WBOYoriginal
2016-05-16 15:49:441314parcourir

J'ai récemment écrit de nombreux mini-jeux interactifs sur WeChat, tels que des flocons de neige, des clics à durée limitée pour gagner des prix, des puzzles à durée limitée, des questions à réponse à durée limitée, etc. Ce sont tous des « jeux à durée limitée » ' (en fait, ils ne sont pas considérés comme des jeux, tout au plus sont-ils un peu divertissants) Juste une petite interaction)

Il y a 4 délais indiqués ci-dessus, oui, c'est vrai, ce qui est enregistré ici est le « minuteur » récemment écrit...

Eh bien, le timer peut être implémenté avec un seul setInterval ou setTimeout, et le code ne dépassera pas dix lignes !

Mais pourquoi ne pas écrire une minuterie réutilisable avec la mentalité de chercher les ennuis ?

1. Peut compter à rebours et compter en avant

2. Réinitialiser, mettre en pause, arrêter, démarrer les fonctions

//计时器
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;
})(); 

Méthode d'appel :

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';
      }
    });

La méthode setStr transmise ici est le traitement de la chaîne avant que l'heure actuelle calculée par le compteur ne soit écrite dans ele

Que le compte à rebours soit un compte à rebours, la valeur par défaut est en avant

Vous pouvez obtenir l'heure actuelle via timerO.timeV

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn