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

Résolu/Fermé
Quedza Messages postés 243 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 21 janvier 2022 - Modifié le 24 juil. 2021 à 17:42
Quedza Messages postés 243 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 21 janvier 2022 - 28 juil. 2021 à 18:27
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
24 juil. 2021 à 18:38
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 243 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 21 janvier 2022 18
Modifié le 24 juil. 2021 à 20:42
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
25 juil. 2021 à 00:36
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 243 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 21 janvier 2022 18 > NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024
25 juil. 2021 à 16:05
"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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331 > Quedza Messages postés 243 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 21 janvier 2022
25 juil. 2021 à 17:31
Si la question est résolue, merci de cliquer sur "Marquer comme résolu"
0
Quedza Messages postés 243 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 21 janvier 2022 18
25 juil. 2021 à 17:36
Désolé : oubli.

Pour l'erreur, j'ai dû confondre avec PHP.
0
Quedza Messages postés 243 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 21 janvier 2022 18
Modifié le 28 juil. 2021 à 19:03
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