Accueil > > > PETITE CLASSE DE TIMERS
PETITE CLASSE DE TIMERS
Information sur la source
Description
Petit code fait rapido ce matin suite à une source postée il y a quelques jours... http://www.javascriptfr.com/code.aspx?ID =42289 C'est un compte à rebours on ne peut plus basique... plusieurs timer peuvent être instanciés en même temps... une fois le compte à rebours terminé un code est exécuté si ce dernier a été passé en paramètre lors de l'instanciation du timer... ce code peut être passé soit sous la forme d'une chaine à évaluer, soit sous la forme d'une référence vers une fonction ou une méthode soit sous la forme d'un url vers lequel l'internaute sera redirigé... .. .
Source
/*
* timers objects reference object for global compatibilitie with the setInterval()
*
* @var _timersObjRef
* @access private
*/
var _timersObjRef = {
count: 0,
obj: new Array
};
/*
* timer class constructor
*
* @param mixed exec javascript evaluable code or function reference or url (for redirect) executed at the end of the timer
* @param str target html contener id
* @param int time start value (in seconds)
* @param int tempo decrement offset (in seconds)
* @param bool noAutoStart disable auto start timer
*
* @return object
* @access public
*/
function timer(exec,target,time,tempo,noAutoStart)
{
// object attributs initialize
this._id = _timersObjRef.count++;
this.tempo = (tempo) ? tempo : 1;
this.interval = this.tempo*1000;
this.time = (time) ? time : 5;
this.current = this.time;
this.target = (target) ? target : null;
this._handle = null;
this._exec = null;
if(exec)
{
// we search if the exec var is an url
var regex = new RegExp("^((ht|f)tps?:\/\/)?(www\.)?([A-Za-z0-9-_:]+\\.[A-Za-z]{2,4})|([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+(:[0-9]+)?)", "gi");
//if it is the exec code is a redirection
if (regex.exec(exec) != null)
this._exec = 'location.href = "'+exec+'";';
else
this._exec = exec;
}
//global object ref for setInterval execution
_timersObjRef.obj[this._id] = this;
//set the timer html contener value
this._setContents();
if(!noAutoStart)
this.start();
}
/************************** Publics methods **************************/
/*
* timer start method
*
* @return void
* @access public
*/
timer.prototype.start = function()
{
//register the interval... we use the global referenced timer for updating action
if(!this._handle)
this._handle = setInterval("_timersObjRef.obj["+this._id+"]._update();",this.interval);
}
/*
* timer stop method
*
* @return void
* @access public
*/
timer.prototype.stop = function()
{
if(this._handle)
{
clearInterval(this._handle);
this._handle = null;
}
}
/*
* timer current value reset
*
* @return void
* @access public
*/
timer.prototype.rewind = function()
{
this.current = this.time;
}
/*
* timer count restart
*
* @return void
* @access public
*/
timer.prototype.restart = function()
{
this.stop();
this.rewind();
this.start();
}
/*
* timer time setter
*
* @param int time start value (in seconds)
*
* @return void
* @access public
*/
timer.prototype.setTime = function(time)
{
this.time = (time) ? time : 5;
}
/*
* timer tempo setter
*
* @param int tempo decrement offset (in seconds)
*
* @return void
* @access public
*/
timer.prototype.setTempo = function(tempo)
{
this.tempo = (tempo) ? tempo : 1;
this.interval = this.tempo*1000;
}
/************************** Privates methods **************************/
/*
* timer updating
*
* @return void
* @access private
*/
timer.prototype._update = function()
{
this.current -= this.tempo;
if(this.target)
this._setContents();
if(this.current == 0)
{
this.stop();
if(this._exec)
{
if(typeof this._exec == "function")
this._exec();
else
eval(this._exec);
}
}
}
/*
* timer target contener updater
*
* @return void
* @access private
*/
timer.prototype._setContents = function()
{
var _targetObj;
if(document.getElementById)
_targetObj = (typeof document.getElementById(this.target) == "object") ? document.getElementById(this.target) : void(0);
else if(document.all)
_targetObj = (typeof document.all[this.target] == "object") ? document.all[this.target] : void(0);
else if(document.layers)
_targetObj = (typeof document[this.target] == "object") ? document[this.target] : void(0);
if(!_targetObj)
return false;
// html input ?
if(_targetObj.type && _targetObj.type == "text")
_targetObj.value = this.current;
else
_targetObj.innerHTML = this.current;
}
Conclusion
La classe est assez simple à utiliser... il y a un exemple assez complet dans le zip... .. .
/* * @param mixed exec code js à évaluer, référence vers une fonction/méthode ou url pour redirection * @param str target id du conteneur html * @param int time temps de départ en secondes (par défaut 5) * @param int tempo valeur de décrémentation * @param bool noAutoStart si true le timer ne démarrera pas automatiquement */ var monTimer = new timer(exec,target,time,tempo,noAutoStart);
en outre vous disposez de quelques méthodes pour gérer le timer 4 pour le gérer et 2 setter...
- start() pour le lancer s'il n'est pas en mode auto - stop() pour l'arrêter - rewind() pour le remettre à sa valeur de début - restart() on repart depuis le début
- setTime() pour modifier le temps total du timer - setTempo() pour modifier sont rythme de décrémentation
Voili voilou... aucun bug trouvé hormis le fait, mais ce n'est pas vraiment un bug car c'est dû à javascript lui même, que le rafraichissement des timers (lorsqu'ils sont plusieurs) ne se fait pas seconde par seconde (si le tempo est à 1) mais par (1*nombre de timers) secondes... .. . ;o)
Historique
- 17 avril 2007 12:22:25 :
- Correction du "bug" sur les champs texte lorsque l'attribut value n'existait pas ou était vide... .. .
- 17 avril 2007 12:49:29 :
- Modification de l'expression régulière pour les url et mise à jour du zip
- 17 avril 2007 13:52:39 :
- la dernière après j'arrête... ajout des setters, suppression de la méthode _getContener() un peu superflue vue qu'elle ne sert qu'une fois... modification de l'exemple pour qu'il soit complet... ajout de quelques commentaires (avec mon anglais légendaire lol) dans le code histoire de... .. .
@ tchaOo°
- 17 avril 2007 14:13:17 :
- Correction d'une erreur de frappe... intégré la méthode _execute() dans la méthode _update() ça simplifie et clarifie le code et ça fait de la place... .. .
- 17 avril 2007 14:20:57 :
- Comme c'est un code fait à la va vite on trouve toujours des choses à changer... lol... modification de stop(), start() et restart()... cette fois ci ça devrait être bon... .. .
- 18 avril 2007 02:22:03 :
- Correction description du constructeur...
- 19 avril 2007 16:20:40 :
- Ajout d'une version "compactée" sans les commentaires et avec une indentation plus dense ce qui permet de passer de 193 lignes/4.55 ko à 66 lignes/2.37 ko... .. . ;o)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
compte a rebours [ par vipere54450 ]
Bonjours a tous, je recherche un script en dynamique qui fasse office de compte a rebours avec un décompte sur 3 jours et qui se remette a zéro autom
Compte a rebours [ par jin150866 ]
Bonjour a tous ! Bonne et heureuse annee 2010 ! Je cherche un script en java pour faire un compte a rebour d'un evenement a une heure precise c'est-
Recherche Compte a rebours avec redirection automatique [ par ansosan ]
Bonjour, Je recherche un script pouvant m'indiquer un compte a rebours ( jour, heure, min, sec) a la fin duquel il y aurait une redirection automatiqu
Compte a rebours [ par youvalcsharpp ]
Bonsoir, Comment faire un compte a rebours dynamique en js ! Je soihaite aller de 45minutes jusqu'a 0 secondes et 0 reediriger ! Mercii Merci beauc
comment faire un bouton de validation avec un compte a rebours [ par zakispeed ]
Bonsoir je sais pas ou mettre mon poste je veux créer un formulaire avec un bouton de validation qu'il sera activer après un compte a rebours de 30
Pobleme Compte à rebours javascript dans boucle PHP [ par ptimushu ]
Bonjour, J'ai énormement de mal à créer un compte à rebours javascript intégré dans une boucle PHP. Voici mon code PHP avec une table [b]produit[/b]
compte a rebours avant la coupe du monde 2010 [ par winky8300 ]
salut a tous j'aimerai mettre un compte a rebours avant la coupe du monde 2010 (11 juin 2010) sur mon forum . (jours -heures-minutes- secondes) quelq
Pb compte rebour dynamique [ par hashut ]
Bonjour j'ai un blem sur un compte rebours quand je suis en millisecondes le compte rebours fonctionne bien mais des c-que je formate la date en heure
Compte à rebours [ par CSIBern ]
Bonjour à tous,Je dois créer un petit site concernant un tournois.Pour ça je comptais insérer un compte à rebours donnant le temps jusqu'à l'événement
créer un compte à rebours à l'heure du serveur [ par ajor ]
Bonjour à tous,J'aimerais pour mon site, créer un compte à rebours qui fonctionne à l'heure du serveur, afin que tous les client aient exactement le m
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|