Bonjour à tous
J'avance petit à petit dans la création d'un système de news en objet ... à savoir l'adaptation de la source disponible à cette adresse : http://www.javascriptfr.com/codes/NEWS-TICKER-LETTRE-LETTRE_30623.aspx (que j'ai adapté à mon besoin).
Tout marche nickel sauf l'effet effectué par le settimeout ... ma fonction d'affichage est bel et bien appelé en récursif mais j'ai l'impression qu'il n'attent pas la fin du délai pour le faire ... ce qui me donne une erreur "too much recursion" dans firefox.
voici mon code si cela inspire quelqu'un:
merci d'avance
François
Classe Comp_Info qui gère une seul info
/**
*Comp_Info
*Constructeur de la classe Comp_Info.
*
*@param string
*@param string
*@param string
*@param string
*@param string
*@param string
*@param string
*
*@return void
*/
function Comp_Info(str_Titre, str_Description, str_Lien, str_Date, str_Heure, str_Type, str_UrlImage)
{
this.str_Titre = str_Titre;
this.str_Description = str_Description;
this.str_Lien = str_Lien;
this.str_Date = str_Date;
this.str_Heure = str_Heure;
this.str_Type = str_Type;
this.str_UrlImage = str_UrlImage;
}
/**
*get_Titre
*Retourne le titre.
*
*@return string
*/
Comp_Info.prototype.get_Titre = function()
{
return this.str_Titre;
}
/**
*get_Description
*Retourne la description.
*
*@return string
*/
Comp_Info.prototype.get_Description = function()
{
return this.str_Description;
}
/**
*get_Lien
*Retourne le lien.
*
*@return string
*/
Comp_Info.prototype.get_Lien = function()
{
return this.str_Lien;
}
/**
*get_Date
*Retourne la date.
*
*@return string
*/
Comp_Info.prototype.get_Date = function()
{
return this.str_Date;
}
/**
*get_Heure
*Retourne l'heure.
*
*@return string
*/
Comp_Info.prototype.get_Heure = function()
{
return this.str_Heure;
}
/**
*get_Type
*Retourne le type.
*
*@return string
*/
Comp_Info.prototype.get_Type = function()
{
return this.str_Type;
}
/**
*get_UrlImage
*Retourne l'url de l'image.
*
*@return string
*/
Comp_Info.prototype.get_UrlImage = function()
{
return this.str_UrlImage;
}
Classe Comp_Infos qui gère plusieurs infos
/**
*Comp_Infos
*Constructeur de la classe Comp_Infos.
*
*@return void
*/
function Comp_Infos()
{
this.array_Infos = new Array();
}
/**
*set_NouvelleInfo
*Ajoute une info.
*
*@param string
*@param string
*@param string
*@param string
*@param string
*@param string
*@param string
*
*@return void
*/
Comp_Infos.prototype.set_NouvelleInfo = function(str_Titre, str_Description, str_Lien, str_Date, str_Heure, str_Type, str_UrlImage)
{
this.array_Infos[this.array_Infos.length] = new Comp_Info(str_Titre, str_Description, str_Lien, str_Date, str_Heure, str_Type, str_UrlImage);
}
/**
*check_Indice
*Vérifie la validité d'un indice.
*
*@param integer
*
*@return boolean
*/
Comp_Infos.prototype.check_Indice = function(int_Indice)
{
if(this.array_Infos[int_Indice] != 'undefined')
return true;
else
return false;
}
/**
*get_NbInfos
*Retourne le nombre total d'infos.
*
*@return integer
*/
Comp_Infos.prototype.get_NbInfos = function()
{
return this.array_Infos.length;
}
/**
*get_UnTitre
*Retourne le titre d'une info.
*
*@param integer
*
*@return string
*/
Comp_Infos.prototype.get_UnTitre = function(int_Indice)
{
if(this.check_Indice(int_Indice))
return this.array_Infos[int_Indice].get_Titre();
else
return 'undefined';
}
/**
*get_UneDescription
*Retourne la description d'une info.
*
*@param integer
*
*@return string
*/
Comp_Infos.prototype.get_UneDescription = function(int_Indice)
{
if(this.check_Indice(int_Indice))
return this.array_Infos[int_Indice].get_Description();
else
return 'undefined';
}
/**
*get_UnLien
*Retourne le lien d'une info.
*
*@param integer
*
*@return string
*/
Comp_Infos.prototype.get_UnLien = function(int_Indice)
{
if(this.check_Indice(int_Indice))
return this.array_Infos[int_Indice].get_Lien();
else
return 'undefined';
}
/**
*get_UneDate
*Retourne la date d'une infos.
*
*@param integer
*
*@return string
*/
Comp_Infos.prototype.get_UneDate = function(int_Indice)
{
if(this.check_Indice(int_Indice))
return this.array_Infos[int_Indice].get_Date();
else
return 'undefined';
}
/**
*get_UneHeure
*Retourne l'heure d'une info.
*
*@param integer
*
*@return string
*/
Comp_Infos.prototype.get_UneHeure = function(int_Indice)
{
if(this.check_Indice(int_Indice))
return this.array_Infos[int_Indice].get_Heure();
else
return 'undefined';
}
/**
*get_UnType
*Retourne le type d'une info.
*
*@param integer
*
*@return string
*/
Comp_Infos.prototype.get_UnType = function(int_Indice)
{
if(this.check_Indice(int_Indice))
return this.array_Infos[int_Indice].get_Type();
else
return 'undefined';
}
/**
*get_UneUrlImage
*Retourne l'url de l'image d'une info.
*
*@param integer
*
*@return string
*/
Comp_Infos.prototype.get_UneUrlImage = function(int_Indice)
{
if(this.check_Indice(int_Indice))
return this.array_Infos[int_Indice].get_UrlImage();
else
return 'undefined';
}
Classe Comp_AfficheInfos qui gère l'affichage des infos (c'est la dedans que ça bug)
/**
*comp_AfficheInfos
*Constructeur de la classe comp_AfficheInfos.
*
*@return void
*/
function Comp_AfficheInfos(obj_CompInfos, str_IdCible, str_Prefixe, int_Vitesse, int_Attente, str_CurseurEcriture1, str_CurseurEcriture2, str_CurseurFin)
{
this.obj_CompInfos = obj_CompInfos;
if(document.getElementById)
this.obj_Cible = document.getElementById(str_IdCible);
else
this.obj_Cible = 'undefined';
this.int_IndiceInfo = 0;
this.int_Taille = 0;
this.str_Prefixe = str_Prefixe;
this.int_Vitesse = int_Vitesse;
this.int_Attente = int_Attente;
this.str_CurseurEcriture1 = str_CurseurEcriture1;
this.str_CurseurEcriture2 = str_CurseurEcriture2;
this.str_CurseurFin = str_CurseurFin;
}
/**
*print_Info
*Affiche une info.
*
*@return void
*/
Comp_AfficheInfos.prototype.print_Info = function()
{
if(this.obj_Cible != 'undefined' && this.obj_CompInfos.get_NbInfos() > 0)
{
var int_TimeOut;
//initialisation des données
str_Titre = this.obj_CompInfos.get_UnTitre(this.int_IndiceInfo);
str_Description = this.obj_CompInfos.get_UneDescription(this.int_IndiceInfo);
str_Lien = this.obj_CompInfos.get_UnLien(this.int_IndiceInfo);
str_Date = this.obj_CompInfos.get_UneDate(this.int_IndiceInfo);
str_Heure = this.obj_CompInfos.get_UneHeure(this.int_IndiceInfo);
str_Type = this.obj_CompInfos.get_UnType(this.int_IndiceInfo);
str_UrlImage = this.obj_CompInfos.get_UneUrlImage(this.int_IndiceInfo);
str_MessageInfo = str_Description + ' [' + str_Date + ' ' + str_Heure + ']';
str_Curseur = this.get_Curseur(str_MessageInfo.length);
str_Info = str_Titre + ' : ' + str_MessageInfo.substring(0, this.int_Taille) + str_Curseur;
//affiche l'info
longueurCible = this.obj_Cible.firstChild.length;
this.obj_Cible.firstChild.replaceData(0, longueurCible, str_Info);
// Modifie la taille de la chaine ainsi que le timer
if(this.int_Taille != str_Info.length)
{
this.int_Taille++;
int_TimeOut = this.int_Vitesse;
}
else
{
this.int_IndiceInfo++;
if(this.int_IndiceInfo >= this.obj_CompInfos.get_NbInfos())
this.int_IndiceInfo = 0;
this.int_Taille = 0;
int_TimeOut = this.int_Attente;
}
//appelle en récursif de la fonction
var Obj = this;
setTimeout(Obj.print_Info(), int_TimeOut); //le problème doit venir de quelque part par la ...
}
}
/**
*get_Curseur
*Retourne le curseur actif.
*
*@return string
*/
Comp_AfficheInfos.prototype.get_Curseur = function(int_Taille)
{
if(this.int_Taille == int_Taille)
return this.str_CurseurFin;
if((this.int_Taille % 2) == 1)
return this.str_CurseurEcriture1;
else
return this.str_CurseurEcriture2;
}