SetInterval (ou setTimeout) plante : quelle est mon erreur ?

Résolu
Quedza Messages postés 242 Date d'inscription   Statut Membre Dernière intervention   -  
Quedza Messages postés 242 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Tout est dans le titre… Le pire, c’est que ça fonctionne… avant de planter.
Je ne vois pas mon erreur. Je m'étonne que cette modeste fonction soit si gourmande…

En clair, je veux faire défiler le titre toutes les demi-secondes.

function titre(nb)
{
 document.title = '\u266b '+document.getElementById('nom'+nb).title;
 defilement();
}
var derniereLettre = '';
function defilement()
{
 derniereLettre = document.title.substring(-1);
 document.title = document.title.substring(+1)+' '+derniereLettre;
 setInterval(defilement, 500);
}


Je vous remercie par avance pour vos réponses.

4 réponses

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Sans tester, quelques remarques :
  • setInterval définit un appel à une fonction selon l'interval spécifié, donc à ne faire qu'une fois
  • setTimeout, permet d'appeller une fonction avec un délai, donc à faire à chaque appel si tu veux périodique
  • Du côté du titre, la variable derniereLettre peut être locale à la fonction (cela évite les soucis)
  • Si je ne me trompe pas .substring(-1) prend la dernière lettre de la chaine et document.title.substring(+1) prend la chaine sauf la première lettre


Donc essaye avec un texte long genre "essai de démo de texte défilant" pour voir le résultat.
0
Quedza Messages postés 242 Date d'inscription   Statut Membre Dernière intervention   18
 
Salut,

Merci pour te réponse.

Comme je l'ai précisé, ma fonction marche exactement comme je le souhaite… avant de planter. Bizarre. J'ai testé sur plusieurs navigateurs.

Tu m'as fait constater que je n'avais pas besoin de créer la variable "derniereLettre" pour que la fonction marche… mais elle plante toujours.

À défaut d'explication, je cherche une alternative…

Voilà ma page :
http://l.munch.free.fr/musique_classique/

Mais évidemment, après essai infructueux, je commente la fonction afin de ne pas constamment faire planter la page.
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Quand j'ai testé ton code (posté dans la question, ), le titre est copié en boucle donc forcément une chaîne qui s’allonge en boucle, ça aide pas ...
Le souci vient de Substring, le -1 ne fonctionne pas comme tu le pense (et surtout est inadapté à ton besoin)
Après quelques essais, je suis arrivé sur un problème d'espace (le navigateur supprime les espaces au début et à la fion du titre.

Donc voici le résultat que j'ai obtenu :
function titre(nb)
{
 document.title = '\u266b Mon titre super long sa mere ';
 setInterval(defilement, 500);
}
var isLastSpace=false;
function defilement()
{
  var derniereLettre=document.title.substring(0,1);
  if(isLastSpace)
  {
    derniereLettre=' '+derniereLettre;
    isLastSpace=false;
  }
  if(document.title.substring(1,2)==" ")
  {
    isLastSpace=true;
  }
  document.title = document.title.substring(1)+derniereLettre;
}
0
Quedza Messages postés 242 Date d'inscription   Statut Membre Dernière intervention   18 > NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention  
 
"Le souci vient de Substring, le -1 ne fonctionne pas comme tu le penses"

En effet: je l'ai constaté après avoir mis "derniereLettre" en alert ! Merci beaucoup ! :D
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365 > Quedza Messages postés 242 Date d'inscription   Statut Membre Dernière intervention  
 
Si la question est résolue, merci de cliquer sur "Marquer comme résolu"
0
Quedza Messages postés 242 Date d'inscription   Statut Membre Dernière intervention   18
 
Désolé : oubli.

Pour l'erreur, j'ai dû confondre avec PHP.
0
Quedza Messages postés 242 Date d'inscription   Statut Membre Dernière intervention   18
 
Pour information et à toutes fins utiles, voilà finalement ce que j’ai imaginé (très fier) :

setInterval(defilement, 500);
function titre(nb)
{
 document.title = '\u266b'+document.getElementById('nom'+nb).title;
}
function defilement()
{
 document.title = document.title.substring(1)+document.title.substring(0,1);
}


JavaSript supprimant les espaces des titres hors zone JavaScript, je les ai forcé par l'entité " & n b s p ; ".
0