Fonction récursive dans boucle while
Posté : 29 mars 2011, 16:51
Bonjour,
J'ai un problème avec une fonction récursive ("slide" dans le code, écrite en JavaScript) appelée dans une boucle while (écrite en php). La fonction récursive hors de la boucle fonctionne.
Voilà ce que je souhaite faire :
J'ai des paragraphes (au format texte) stockés dans une base de données MySQL. Je souhaite afficher ses paragraphes en bas d'une page et les faire défiler verticalement, les uns à la suite des autres.
J'ai donc pour cela une fonction slide en JavaScript, qui permet le mouvement vertical du texte, et j'appelle cette fonction dans la boucle while de la requête qui va chercher les paragraphes dans la base de données.
Le problème c'est que la boucle while s'éxécute sans attendre que la fonction récursuve JavaScript soit terminée. Et donc elle (la boucle while) se termine avant la fin de la première éxécution de la fonction slide. J'ai donc seulement le premier paragraphe qui s'affiche et défile.
Je vous poste mon code. Est-ce qu'il y a une erreur ? Ou y-a t'il une autre méthode pour faire cela ?
Merci
Sophie
J'ai un problème avec une fonction récursive ("slide" dans le code, écrite en JavaScript) appelée dans une boucle while (écrite en php). La fonction récursive hors de la boucle fonctionne.
Voilà ce que je souhaite faire :
J'ai des paragraphes (au format texte) stockés dans une base de données MySQL. Je souhaite afficher ses paragraphes en bas d'une page et les faire défiler verticalement, les uns à la suite des autres.
J'ai donc pour cela une fonction slide en JavaScript, qui permet le mouvement vertical du texte, et j'appelle cette fonction dans la boucle while de la requête qui va chercher les paragraphes dans la base de données.
Le problème c'est que la boucle while s'éxécute sans attendre que la fonction récursuve JavaScript soit terminée. Et donc elle (la boucle while) se termine avant la fin de la première éxécution de la fonction slide. J'ai donc seulement le premier paragraphe qui s'affiche et défile.
Je vous poste mon code. Est-ce qu'il y a une erreur ? Ou y-a t'il une autre méthode pour faire cela ?
Merci
Sophie
<head>
<script language="JavaScript1.2">
var isNS = (navigator.appName == "Netscape");
var HIDDEN = (isNS) ? 'hide' : 'hidden';
var VISIBLE = (isNS) ? 'show' : 'visible';
var hide=true;
function showObject(object) {
object.visibility = VISIBLE;
}
function hideObject(object) {
object.visibility = HIDDEN;
}
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
function hideIt(effet){
if(hide){
effet.visibility="hidden"
}
}
function slide(effet,from,to,from1,to1) {
//position de départ horizontale
ide.left = 0;
//position de départ verticale
ide.top = 200;
showObject(ide);
//slide effet
if (from > to) {
ide.left = (from -= 2);//7
}
if (from1 > to1) {
ide.top = (from1 -= 2);//4
}
if ((from > to) || (from1 > to1)){
setTimeout('slide(ide,' + from + ',' + to + ',' + from1 +',' + to1 + ')', 25);
}
if (from1==to1){
sleep(2000);
hideIt(ide);
var fini=true;
}
}
</script>
<style type="text/css">
<!--
.aspect {position:absolute;visibility:hidden}
-->
</style>
</head>
<body>
<?
@mysql_connect($hote,$user,$pwd) or die ("impossible de se connecter au serveur");
@mysql_select_db($bdd) or die ("impossible de se connecter à la base");
$query="select uid, bodytext from tt_content where pid=1530 and deleted=0 order by uid";
$result=mysql_query($query);
?>
<script language="JavaScript">
var fini=true;
</script>
<?
while($val=mysql_fetch_array($result)){
?>
<div id="<? echo "id_".$val["uid"];?>" class="aspect">
<? echo $val["bodytext"];?>
</div>
<script language="JavaScript">
if (fini==true){
var <? echo "id_".$val["uid"];?> = (isNS) ? document.<? echo "id_".$val["uid"];?> : document.all.<? echo "id_".$val["uid"];?>.style;
var ide=String;
ide=<? echo "id_".$val["uid"];?>
slide(ide,0,0,200,0);
fini=false;
}
</script>
<?
}
?>
</body>