Aide personnalisation Script JS "machine à ecrire"

VaN
Mammouth du PHP | 1107 Messages

28 juin 2005, 10:01

Le script "machine à écrire" récuperer sur le net :

Code : Tout sélectionner

<script language="JavaScript"> var i=0 var j=0 var texteNE, affiche // Initialisation du texte machine à écrire var texte ="<?php echo $result['texte']?>" var ie = (document.all); var ne = (document.layers); // Initialisation de la zone de texte function init(){ texteNE=''; machine_a_ecrire(); } // Affichage des caractères progressifs function machine_a_ecrire(){ texteNE=texteNE+texte.charAt(i) affiche=texteNE // teste si c'est une balise à HTML est insérée dans le texte if (texte.charAt(i)=="<") { j=1 } if (texte.charAt(i)==">") { j=0 } if (j==0) { // on fait l'affichage si ce n'est pas une balise HTML if (ie) { // avec internet explorer document.all("bulle").innerHTML = affiche; } if (ne) { // avec Netscape document.bulle.document.write(affiche); document.bulle.document.close(); } } if (i<texte.length-1){ i++ //modifier la valeur 100 pour un affichage plus rapide ou plus lent setTimeout("machine_a_ecrire()",100) } else return } </script>
un petit truc me chagrine, le message s'affiche une fois, puis reste affiché. j'aimerais le personnaliser pour qu'une fois affiché, il s'efface d'un coup et que le script redémarre. Une sorte de boucle quoi. Mais je ne connait rien au JS. est ce que l'insérer dans une boucle php qui tournerait à l'infini est une solution envisageable ?

Mammouth du PHP | 19672 Messages

28 juin 2005, 10:28

...une boucle php qui tournerait à l'infini...
Non, parce que ta boucle va s'arrêter au bout de trente seconde (time out par défaut sur le serveur et tant que le script n'aura pas terminé, tu n'auras rien d'affiché sur ta page.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 juin 2005, 10:29

est ce que l'insérer dans une boucle php qui tournerait à l'infini est une solution envisageable ?
Quel intérêt de mélanger des langages qu'on ne fait pas appel à leurs spécificités ?
Utiliser PHP ne t'apporte rien dans ce cas précis puisque ton script de machine à écrire est côté client.
Tu peux donc très bien créer ta boucle en javascript, ce sera plus homogène et ça ne sollicitera pas le servuer. ;)

VaN
Mammouth du PHP | 1107 Messages

28 juin 2005, 10:41

après quelques renseignements prit sur le net, j'essaie de faire comme ceci :

var compteur = 1;

do {
...
}
while(compteur>0);

mais je n'arrive pas à trouver où mettre la boucle. En mettant l'intégralité du script à l'interieur, le browser plante. J'ai essayé autour de

Code : Tout sélectionner

function init(){ texteNE=''; machine_a_ecrire(); }
et autour de

Code : Tout sélectionner

function init(){ texteNE=''; machine_a_ecrire(); } function machine_a_ecrire(){ texteNE=texteNE+texte.charAt(i) affiche=texteNE }
sans résultats. Ou doit se placer ma boucle ?

VaN
Mammouth du PHP | 1107 Messages

28 juin 2005, 15:43

je n'ai toujours pas trouvé ou placer cette boucle, et comment la formuler, pour que mon texte s'efface et se repete indefiniment :/
un conseil ?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 juin 2005, 16:42

<script type="text/javascript">
var i=0;
var j=0;
var texteNE, affiche;
var texte ="<?php echo $result['texte']; ?>";
var ie = (document.all);
var ne = (document.layers); 

function init()
{ while (1==1)
        { texteNE='';
          machine_a_ecrire();
        }
}

function machine_a_ecrire()
{ texteNE = texteNE + texte.charAt(i);
  affiche = texteNE;
  if (texte.charAt(i)=="<") j=1;
  if (texte.charAt(i)==">") j=0;
  if (j==0)
     { if (ie)
          document.all("bulle").innerHTML = affiche;
       if (ne)
          { document.bulle.document.write(affiche);
            document.bulle.document.close();
          }
     }
  if (i<texte.length-1)
     { i++;
       setTimeout("machine_a_ecrire()",100);
     }
     else return;
}
</script>
Essaie avec ça.
J'ai modifié la fonction init() mais je ne garantis pas (pas testé).

En revanche, j'en ai profité pour corriger ton code qui n'était pas très propre... ;)

VaN
Mammouth du PHP | 1107 Messages

28 juin 2005, 18:17

==> plantage de browser :lol:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 juin 2005, 18:24

Aurais-je merdu quelque part ?... :lol:

Effectivement, la fonction init() qui s'auto-boucle, c'est vorace.
Pas top top, mon idée. Mais il fait chaud et j'ai pas d'autre idée...

VaN
Mammouth du PHP | 1107 Messages

29 juin 2005, 16:38

:cry:

VaN
Mammouth du PHP | 1107 Messages

01 juil. 2005, 14:14

^^ toujours pas réussi a boucler ma fonction : /

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

01 juil. 2005, 14:55

Je manque d'idées...
Tu peux aussi tenter ça :
function init()
{ texteNE='';
   machine_a_ecrire();
  init();
}
mais j'ai bien peur que ça fasse aussi planter ton navigateur.
Et puis, c'est pas propre.

Quelqu'un aurait une suggestion ?

VaN
Mammouth du PHP | 1107 Messages

01 juil. 2005, 15:00

mais j'ai bien peur que ça fasse aussi planter ton navigateur.
gagné :lol: :roll: :cry:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

01 juil. 2005, 15:11

Pas surprenant, hélas.

Ne serait-il pas plus simple de chercher sur le web un script de machine à écrire qui boucle ?
Ça doit exister, non ?

VaN
Mammouth du PHP | 1107 Messages

04 juil. 2005, 09:31

deja cherché, recherche infructueuse hélas : / il n'y a deja pas masse de script machine a ecrire, alors en plus qui boucle.. :cry:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

04 juil. 2005, 12:30

Il me semble que le script que tu as récupéré provient de :
- http://www.asp-magazine.com/fr/javascri ... es/tr3.htm
- http://www.editeurjavascript.com/script ... _3_207.php

Mais si tu regardes ailleurs, tu en trouveras qui bouclent :
- http://pagesperso.accesinternet.laposte ... 987522025/
- http://perso.wanadoo.fr/patrice.roatta/ ... niere.html
- http://www.flashkod.com/code.aspx?ID=23789

Tu es sûr d'avoir bien cherché ?
Un simple coup de :google: m'a suffi. ;)