Bonjour,
J'ai repris un script permettant de faire défiler des images avec un effet de fondu enchaîné.
Mon soucis est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 var delay = 1000; var start_frame = 0; function init() { var lis = $('slide-images').getElementsByTagName('li'); for( i=0; i < lis.length; i++){ if(i!=0){ lis[i].style.display = 'none'; } } end_frame = lis.length-1; start_slideshow(start_frame, end_frame, delay, lis); } function start_slideshow(start_frame, end_frame, delay, lis) { setTimeout(fadeInOut(start_frame,start_frame,end_frame, delay, lis), delay); } function fadeInOut(frame, start_frame, end_frame, delay, lis) { return (function() { lis = $('slide-images').getElementsByTagName('li'); Effect.Fade(lis[frame]); //if (frame == end_frame) { frame = start_frame; } else { frame++; } frame=Math.floor(Math.random()*10); lisAppear = lis[frame]; setTimeout("Effect.Appear(lisAppear);", 0); setTimeout(fadeInOut(frame, start_frame, end_frame, delay), delay + 1850); }) }
Initialement, le script fait défiler les images les unes à la suite des autres. (expression commentée en rouge gras).
Mais j'aimerais que les images défilent de manière aléatoire, j'ai donc modifié le script en substituant le code en gras bleu.
Cependant, cette modification entraîne un mauvais fonctionnement du script : de temps en temps j'ai un rectangle blanc qui apparaît au lieu d'une image. Ce n'est pas reproductible, le phénomène est vraiment aléatoire. J'ai cherché durant 3 jours et je ne trouve absolument pas...
Je me demandais si ce n'était pas un problème avec le setTimeout qui se lancerait avant que la fonction ait finie de s'exécuter, mais pourquoi le fait de générer un nombre aléatoire entraînerait ce genre d'erreur ? Je suis perdu...
Merci d'avance pour votre aide,
P.S : j'ai 10 images déclarées dans 10 balises <li..> d'où le *10 pour le random.
Partager