|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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)
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
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
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
compte a rebour space [ par quitues ]
Je recherche un compte à rebours, un décompte space car il démarre du chargement de la page et dé kil s'arrête (par ex. dans 5 sec.), le visiteur est
compte rebours [ par goutedo ]
Bonjour à tous !J'ai un problème tout simple je crois, mais le Javascript et moi on ne s'aime pas beaucoup et du coup j'avance pas.Bre
compte a rebours j h m s a partir de seconde [ par matttt34 ]
Salut tout le monde :) J'ai beau chercher partout je n'arrive pas a trouver ce que je cherche : Je souhaiterais avoir un compte a rebours m'affichan
Compte a rebours [ par Tilix ]
Salut, J'ai trouvé ce petit compte à rebours, mais j'ai besoin de l'améliorer... <SCRIPT LANGUAGE="JavaScript"> <!-- function
Redirection avec compte a rebours [ par twinsen60 ]
BonjourJ'ai ce code ci :<script language="javascript" type="text/javascript"> <!-- window.location.replace( "http://www.un-site.com/une-pag
Compte a rebours [ par ptitdragonvert ]
Bonjour,Je cherche un compte a rebours en javascript avec le decompte 'H:M:S' et la possibilité de pouvoir en mettre plusieurs sur une meme page.Moi j
Décompte (compte a rebours) qui affiche le nombre de mois, de jour, d'heure, de minutes de seconde qui reste avant un évenement [ par slashf ]
salut a tous comme le titre le montre j'ai besoin de créé un compte a rebours qui affiche le nombre de mois, de jour, d'heure, de minutes de seconde q
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
Compte a rebours pour mon site [ par jim0907 ]
Bonjour, Cela fait plusieurs jour que je cherche sur internet un compte a rebours pour mon site, je ne trouve pas du tout ce qu'il me faut alors j'ai
|
Téléchargements
Logiciels à télécharger sur le même thème :
|