je ne vois pas comment tu pourrais avoir des doublons avec la dernière solution ...
tu veux dire que sur le même lot de 5 tu as deux fois le même logo ????
je ne vois pas comment tu pourrais avoir des doublons avec la dernière solution ...
tu veux dire que sur le même lot de 5 tu as deux fois le même logo ????
oui c'est ça
arf j'oubliais de vider le RunGal ...
le truc c'est que du coup si dans l'array de travail il reste moins de 5 images elle ne seront pas affichées ...
prèfères tu vider l'array avant ?
Je me demande pourquoi j'ai été me compliquer ...
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 if(RunGal.length>0){ while(IndexDiv<5){ Indice=Math.floor(Math.random()*RunGal.length); document.getElementById('result'+IndexDiv).src=RunGal[Indice].src; document.getElementById('result'+IndexDiv).lien=RunGal[Indice].lien; RunGal.splice(Indice,1); IndexDiv++; if(RunGal.length<0){ RunGal=RunGal.concat(Gallerie); break;} } IndexDiv=(IndexDiv==5)?0:IndexDiv; Launch=setTimeout(DiapoRand,1000) } else{ clearTimeout(Launch); RunGal=RunGal.concat(Gallerie) DiapoRand(); } }
Excellent, ça marche super bien si le nombre d'images dans l'array est un multiple de 5...
Sinon ça se bloque...
Allez, c'est la dernière chtite difficulté et j'arrête de te martyriser...
Testé avec 12 images ...
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 if(RunGal.length>0){ while(IndexDiv<5){ Indice=Math.floor(Math.random()*RunGal.length); document.getElementById('result'+IndexDiv).src=RunGal[Indice].src; document.getElementById('result'+IndexDiv).lien=RunGal[Indice].lien; //Tampon+=RunGal[Indice].src+"<br />"; RunGal.splice(Indice,1); IndexDiv++; if(RunGal.length==0){ RunGal=RunGal.concat(Gallerie); break;} } //document.getElementById('result').innerHTML+=Tampon+" <br/>" //Tampon="" IndexDiv=(IndexDiv==5)?0:IndexDiv; Launch=setTimeout(DiapoRand,1000) } else{ clearTimeout(Launch); RunGal=RunGal.concat(Gallerie) DiapoRand(); } }
testé avec 7 images... re doublons....
t'aimes ça hein !
ha oui j'avais pas pensé moins de 10 ...
bon ben je vais faire un prototpye de nettoyage de doublons dans un array ...
Et ce sera là mon dernier mot
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 <script type='text/javascript'> var Gallerie=new Array(); Gallerie[0]=new Image(); Gallerie[0].src="image0.jpg"; Gallerie[0].lien="autrepage1.htm" Gallerie[1]=new Image(); Gallerie[1].src="image1.jpg"; Gallerie[1].lien="autrepage2.htm" Gallerie[2]=new Image(); Gallerie[2].src="image2.jpg"; Gallerie[2].lien="autrepage3.htm" Gallerie[3]=new Image(); Gallerie[3].src="image3.jpg"; Gallerie[3].lien="autrepage4.htm" Gallerie[4]=new Image(); Gallerie[4].src="image4.jpg"; Gallerie[4].lien="autrepage5.htm" Gallerie[5]=new Image(); Gallerie[5].src="image5.jpg"; Gallerie[5].lien="autrepage6.htm" Gallerie[6]=new Image(); Gallerie[6].src="image6.jpg"; Gallerie[6].lien="autrepage7.htm" Gallerie[7]=new Image(); Gallerie[7].src="image7.jpg"; Gallerie[7].lien="autrepage8.htm" /*Gallerie[8]=new Image(); Gallerie[8].src="image8.jpg"; Gallerie[8].lien="autrepage9.htm" Gallerie[9]=new Image(); Gallerie[9].src="image9.jpg"; Gallerie[9].lien="autrepage9.htm" Gallerie[10]=new Image(); Gallerie[10].src="image10.jpg"; Gallerie[10].lien="autrepage10.htm" Gallerie[11]=new Image(); Gallerie[11].src="image10.jpg"; Gallerie[11].lien="autrepage10.htm" */ var Launch; var IndexDiv=0; var EndGal=new Array(); var RunGal=new Array(); RunGal=RunGal.concat(Gallerie); var Tampon=""; function DiapoRand(){ if(RunGal.length>0){ while(IndexDiv<5){ Indice=Math.floor(Math.random()*RunGal.length); document.getElementById('result'+IndexDiv).src=RunGal[Indice].src; document.getElementById('result'+IndexDiv).lien=RunGal[Indice].lien; //Tampon+=RunGal[Indice].src+"<br />"; RunGal.splice(Indice,1); IndexDiv++; if(RunGal.length<5){ EndGal.push(Gallerie[Indice]); } if (RunGal.length==0){ RunGal=RunGal.concat(Gallerie); break;} } //document.getElementById('result').innerHTML+=Tampon+" <br/>" // Tampon="" IndexDiv=(IndexDiv==5)?0:IndexDiv; Launch=setTimeout(DiapoRand,1000) } else{ clearTimeout(Launch); RunGal=RunGal.concat(Gallerie) DiapoRand(); } } Array.prototype.CleanDoublon=NoDbl; function NoDbl(){ for(i=0;this[i];i++){ for(j=0;EndGal[j];j++){ if(this[i]==EndGal[j]){this.splice(i,1); i--; EndGal.splice(j,1); } } } } </script>
arf j'ai parlé trop tot ... je n'arrive pas a cerner la cause des doublons
A mon avis c'est gros comme un gros truc ... enfin un gros truc quoi
Mais j'ai tellement le nez dedans ... un oeil externe serait le bienvenu ...
Effectivement, encore des petites répetitions mais en tous les cas, un super grands merci pour t'être décarcassé autant...
Il n'en faudrait pas beaucoup pour que je voue un culte à la grande grenouille de l'espace
voici un code sans les doublons (j'ai fait 1500 "lots" avec 8 images, il n'y a pas eu de doublon) :
Code x : 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title></title> <script type="text/javascript"> <!-- var Gallerie=new Array(); Gallerie[0]=new Image(); Gallerie[0].src="image0.jpg"; Gallerie[0].lien="autrepage1.htm" Gallerie[1]=new Image(); Gallerie[1].src="image1.jpg"; Gallerie[1].lien="autrepage2.htm" Gallerie[2]=new Image(); Gallerie[2].src="image2.jpg"; Gallerie[2].lien="autrepage3.htm" Gallerie[3]=new Image(); Gallerie[3].src="image3.jpg"; Gallerie[3].lien="autrepage4.htm" Gallerie[4]=new Image(); Gallerie[4].src="image4.jpg"; Gallerie[4].lien="autrepage5.htm" Gallerie[5]=new Image(); Gallerie[5].src="image5.jpg"; Gallerie[5].lien="autrepage6.htm" Gallerie[6]=new Image(); Gallerie[6].src="image6.jpg"; Gallerie[6].lien="autrepage7.htm" Gallerie[7]=new Image(); Gallerie[7].src="image7.jpg"; Gallerie[7].lien="autrepage8.htm" /*Gallerie[8]=new Image(); Gallerie[8].src="image8.jpg"; Gallerie[8].lien="autrepage9.htm" Gallerie[9]=new Image(); Gallerie[9].src="image9.jpg"; Gallerie[9].lien="autrepage9.htm" Gallerie[10]=new Image(); Gallerie[10].src="image10.jpg"; Gallerie[10].lien="autrepage10.htm" Gallerie[11]=new Image(); Gallerie[11].src="image10.jpg"; Gallerie[11].lien="autrepage10.htm"*/ var chrono; var EndGal = new Array(); var RunGal = new Array(); RunGal = RunGal.concat(Gallerie); function DiapoRand() { var indice; var indexDiv = 0; var i, j; var test; EndGal.splice(0); while (indexDiv<5) { indice = Math.floor(Math.random()*RunGal.length); EndGal[indexDiv] = RunGal[indice]; RunGal.splice(indice,1); if (RunGal.length==0) { for (i=0; i<Gallerie.length; i++) { test = false; for (j=0; j<EndGal.length; j++) { test = test || (Gallerie[i]==EndGal[j]); } if (!test) { RunGal = RunGal.concat(Gallerie[i]); } } } indexDiv++; } affichageTest(); //pour debugage chrono=setTimeout("DiapoRand()","1000"); } function affichageTest() { var out="", i, j; var test = false; for (i=0; i<EndGal.length; i++) out = out +"<br>"+EndGal[i].src; for (i=0; i<EndGal.length-1; i++) { for (j=i+1; j<EndGal.length; j++) { test = (test||(EndGal[i].src==EndGal[j].src)); } } if (test) out = out + "<span style='color:#FF0000; text-weight:bold'>=> -doublon-</span>"; else out = out + "=> pas de doublon"; document.getElementById("result").innerHTML += out + "<br>"; } //--> </script> </head> <body onload="chrono=setTimeout('DiapoRand()','1000')"> <div id='result'></div> </body> </html>
J'ai pris le problème inverse de SF ; j'ai ajouté les éléments manquants plutôt que de supprimer les éléments en trop :
Grâce à cette boucle j'ajoute dans RunGal les éléments qui ne sont pas présents dans EndGal.
Code javascript : 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 if (RunGal.length==0) { for (i=0; i<Gallerie.length; i++) { test = false; for (j=0; j<EndGal.length; j++) { test = test || (Gallerie[i]==EndGal[j]); } if (!test) { RunGal = RunGal.concat(Gallerie[i]); } } }
Un grand merci pour ta réponse auteur.
J'ai regardé ton code, j'arrive à faire fonctionner ton premier code avec les tests mais je n'arrive pas à intégrer la bonne partie du code dans celui déjà existant pour faire ce que je voudrais...
Y-a-t-il un truc qui cloche?
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title>SlideShow</title> <script type='text/javascript'> var Gallerie=new Array(); Gallerie[0]=new Image(); Gallerie[0].src="forme_01.jpg"; Gallerie[0].lien="autrepage1.htm" Gallerie[1]=new Image(); Gallerie[1].src="forme_02.jpg"; Gallerie[1].lien="autrepage2.htm" Gallerie[2]=new Image(); Gallerie[2].src="forme_03.png"; Gallerie[2].lien="autrepage3.htm" Gallerie[3]=new Image(); Gallerie[3].src="Hemes.gif"; Gallerie[3].lien="autrepage4.htm" Gallerie[4]=new Image(); Gallerie[4].src="ER.gif"; Gallerie[4].lien="autrepage5.htm" Gallerie[5]=new Image(); Gallerie[5].src="jadot.png"; Gallerie[5].lien="autrepage6.htm" Gallerie[6]=new Image(); Gallerie[6].src="logo_CAN-E.jpg"; Gallerie[6].lien="autrepage7.htm" Gallerie[7]=new Image(); Gallerie[7].src="logo_UCL-TERM1.jpg"; Gallerie[7].lien="autrepage8.htm" var chrono; var EndGal = new Array(); var RunGal = new Array(); RunGal = RunGal.concat(Gallerie); function DiapoRand() { var indice; var indexDiv = 0; var i, j; var test; EndGal.splice(0); while (indexDiv<5) { indice = Math.floor(Math.random()*RunGal.length); EndGal[indexDiv] = RunGal[indice]; RunGal.splice(indice,1); if (RunGal.length==0) { for (i=0; i<Gallerie.length; i++) { test = false; for (j=0; j<EndGal.length; j++) { test = test || (Gallerie[i]==EndGal[j]); } if (!test) { RunGal = RunGal.concat(Gallerie[i]); } } } </script> </head> <body onload="Launch=setTimeout(DiapoRand,0)"> <p><img id='result0' lien='...' onclick='self.location.href=this.lien' /></p> <p> <img id='result1' lien='...' onclick='self.location.href=this.lien' /></p> <p> <img id='result2' lien='...' onclick='self.location.href=this.lien' /></p> <p> <img id='result3' lien='...' onclick='self.location.href=this.lien' /></p> <p> <img id='result4' lien='...' onclick='self.location.href=this.lien' /> </p> </body> </html>
oui, il y a quelque chose qui cloche
1- Tu t'es trompé de variable dans le onload. Ce n'est pas Launch mais chrono qui récupère le résultat de setTimeout ;
2- Tu as oublié la fin de la fonction
supprime l'appel à affichageTest() c'est tout ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 indexDiv++; } affichageTest(); //pour debugage chrono=setTimeout("DiapoRand()","1000"); }
3- A aucun moment tu modifies le src de tes images avec le contenu de EndGal.
Je te posterai un code corrigé d'ici la fin de journée....
Un super grand merci auteur
là ça doit marcher :
Code html : 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 <html> <head> <title></title> <script type="text/javascript"> <!-- var Gallerie=new Array(); Gallerie[0]=new Image(); Gallerie[0].src="forme_01.jpg"; Gallerie[0].lien="autrepage1.htm" Gallerie[1]=new Image(); Gallerie[1].src="forme_02.jpg"; Gallerie[1].lien="autrepage2.htm" Gallerie[2]=new Image(); Gallerie[2].src="forme_03.png"; Gallerie[2].lien="autrepage3.htm" Gallerie[3]=new Image(); Gallerie[3].src="Hemes.gif"; Gallerie[3].lien="autrepage4.htm" Gallerie[4]=new Image(); Gallerie[4].src="ER.gif"; Gallerie[4].lien="autrepage5.htm" Gallerie[5]=new Image(); Gallerie[5].src="jadot.png"; Gallerie[5].lien="autrepage6.htm" Gallerie[6]=new Image(); Gallerie[6].src="logo_CAN-E.jpg"; Gallerie[6].lien="autrepage7.htm" Gallerie[7]=new Image(); Gallerie[7].src="logo_UCL-TERM1.jpg"; Gallerie[7].lien="autrepage8.htm"; var chrono; var EndGal = new Array(); var RunGal = new Array(); RunGal = RunGal.concat(Gallerie); function DiapoRand() { var indice; var indexDiv = 0; var i, j; var test; EndGal.splice(0); while (indexDiv<5) { indice = Math.floor(Math.random()*RunGal.length); EndGal[indexDiv] = RunGal[indice]; RunGal.splice(indice,1); if (RunGal.length==0) { for (i=0; i<Gallerie.length; i++) { test = false; for (j=0; j<EndGal.length; j++) { test = test || (Gallerie[i]==EndGal[j]); } if (!test) { RunGal = RunGal.concat(Gallerie[i]); } } } indexDiv++; } // affichage des images var baliseImg; for (i=0; i<5; i++) { baliseImg = document.getElementById("result"+i); baliseImg.src = EndGal[i].src; baliseImg.lien = EndGal[i].lien; baliseImg.onclick = function(){document.location.href = this.lien}; } chrono=setTimeout("DiapoRand()","1000"); } //--> </script> </head> <body onload="chrono=setTimeout('DiapoRand()','1000')"> <p> <img id='result0' src="" /> </p> <p> <img id='result1' src="" /> </p> <p> <img id='result2' src="" /> </p> <p> <img id='result3' src="" /> </p> <p> <img id='result4' src="" /> </p> </body> </html>
Un grand merci AUTEUR !!
C'est exactement ce que je voulais.
Merci aussi à Spacefrog pour le début de la cogitation.
Rien à dire... Developpez.com RUUUUUUUUULES
Gregius
Je n'ai toujours pas compris pourquoi j'ai des doublons ...
Si quelqu'un voit le bug ...
Merci
Spacefrog : voilà un début d'explication des doublons :
Code x : 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title>SlideShow</title> <script type='text/javascript'> var Gallerie=new Array(); Gallerie[0]=new Image(); Gallerie[0].src="image0.jpg"; Gallerie[0].lien="autrepage1.htm" Gallerie[1]=new Image(); Gallerie[1].src="image1.jpg"; Gallerie[1].lien="autrepage2.htm" Gallerie[2]=new Image(); Gallerie[2].src="image2.jpg"; Gallerie[2].lien="autrepage3.htm" Gallerie[3]=new Image(); Gallerie[3].src="image3.jpg"; Gallerie[3].lien="autrepage4.htm" Gallerie[4]=new Image(); Gallerie[4].src="image4.jpg"; Gallerie[4].lien="autrepage5.htm" Gallerie[5]=new Image(); Gallerie[5].src="image5.jpg"; Gallerie[5].lien="autrepage6.htm" Gallerie[6]=new Image(); Gallerie[6].src="image6.jpg"; Gallerie[6].lien="autrepage7.htm" Gallerie[7]=new Image(); Gallerie[7].src="image7.jpg"; Gallerie[7].lien="autrepage8.htm" /*Gallerie[8]=new Image(); Gallerie[8].src="image8.jpg"; Gallerie[8].lien="autrepage9.htm" Gallerie[9]=new Image(); Gallerie[9].src="image9.jpg"; Gallerie[9].lien="autrepage9.htm" Gallerie[10]=new Image(); Gallerie[10].src="image10.jpg"; Gallerie[10].lien="autrepage10.htm" Gallerie[11]=new Image(); Gallerie[11].src="image10.jpg"; Gallerie[11].lien="autrepage10.htm" */ var Launch; var IndexDiv=0; var EndGal=new Array(); var RunGal=new Array(); RunGal=RunGal.concat(Gallerie); var Tampon=""; var Lot=0; function DiapoRand() { if(RunGal.length>0) { Tampon="Lot : " + Lot+"<br />"; while(IndexDiv<5) { Indice=Math.floor(Math.random()*RunGal.length); //document.getElementById('result'+IndexDiv).src=RunGal[Indice].src; //document.getElementById('result'+IndexDiv).lien=RunGal[Indice].lien; Tampon+=RunGal[Indice].src+"<br />"; RunGal.splice(Indice,1); IndexDiv++; if(RunGal.length<5) { EndGal.push(Gallerie[Indice]); } if(IndexDiv==4){Lot++;} if (RunGal.length==0) { RunGal=RunGal.concat(Gallerie); RunGal.CleanDoublon(); break; } } //document.getElementById('result').innerHTML+=Tampon+" <br/>" Tampon=""; IndexDiv=(IndexDiv==5)?0:IndexDiv; Launch=setTimeout("DiapoRand()","1000"); } /* else { clearTimeout(Launch); RunGal=RunGal.concat(Gallerie) DiapoRand(); }*/ } Array.prototype.CleanDoublon=NoDbl; function NoDbl() { var i; for(i=0;i<EndGal.length;i++) { document.getElementById('result').innerHTML+=EndGal[i].src+" <br/>" } } </script> </head> <body onload="Launch=setTimeout(DiapoRand,1000)"> <div id='result'></div> <div id='result0' lien='...' onclick='self.location.href=this.lien' /></div> <div id='result1' lien='...' onclick='self.location.href=this.lien' /></div> <div id='result2' lien='...' onclick='self.location.href=this.lien' /></div> <div id='result3' lien='...' onclick='self.location.href=this.lien' /></div> <div id='result4' lien='...' onclick='self.location.href=this.lien' /></div> </body> </html>
j'ai modifié ta fonction NoDbl() pour qu'il affiche le contenu de EndGal (désolé pour l'indentation du code). C'est EndGal qui contient des doublons...
Je continue à chercher
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager