SetInterval() pour diaporama qui ne lance l'action qu'une seule fois :( [Résolu]

Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
- - Dernière réponse : BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
- 7 avril 2010 à 23:56
Bonsoir tout le monde,

je suis en train d'arriver au bout de la réalisation de mon diaporama perso, et il me reste un point à terminer : le mode "SlideShow" qui permet, en appuyant sur play, d'afficher les images les unes après les autres toutes les x secondes.
J'utilise donc un "setInterval" pour gérer cela, problème : mon setInterval ne lance l'affichage que d'une seule image, et les autres images ne suivent pas.
J'ai regardé du côté de la doc et je ne vois pas réellement où peut être mon erreur.

Voici mon code :
function SlideShow(){
removeMovieClip("monClip");
var clip:MovieClip = this._root.attachMovie("IDrebours","rebours",getNextHighestDepth()+1,{_x:904.9,_y:626.8});
var clip:MovieClip = this._root.attachMovie("IDmonClip","monClip",getNextHighestDepth()+1,{_x:600,_y:328.5});
function loadBitmapSmoothed(url:String, cible:MovieClip) { 
var bmc:MovieClip = cible.createEmptyMovieClip("bmc", cible.getNextHighestDepth()); 

var listener:Object = new Object();

listener.tmc = cible;

listener.onLoadProgress = function(mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void{
var pourcentage:Number = bytesLoaded/bytesTotal*100;
if(pourcentage<100){
_root.clipRoue._visible = true;
}
if(pourcentage == 100){
_root.clipRoue._visible = false;
Wash.start();
new Tween(monClip, "_alpha", Elastic.easeOut, 0, 100, 20, true);
mx.transitions.TransitionManager.start(monClip, {type:mx.transitions.Squeeze, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});
}
}

listener.onLoadInit = function(mc:MovieClip){
mc._visible = false;
_root.monClip.clip2._x = _root.monClip.clip2._x-mc._width/2;
_root.monClip.clip2._y = _root.monClip.clip2._y-mc._height/2;
ZoomCalcul = new Array();
zoomTaux.text = "";

bitmap.dispose();
bitmap = new BitmapData(mc._width, mc._height, true);

this.tmc.attachBitmap(bitmap, this.tmc.getNextHighestDepth(),"auto",true); 
bitmap.draw(mc);
}	

var loader:MovieClipLoader = new MovieClipLoader(); 
loader.addListener(listener); 
loader.loadClip(url, bmc);
}
if(Pos == visuels_noms.length){
Pos = -1;
loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos+1];
Pos = Pos+1;
}else if(Pos !== visuels_noms.length){
loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos+1];
Pos = Pos+1;
}
if(rebours.compteur.text == 0){
removeMovieClip("rebours");
}
}

clipMenu.btn_play.onRelease = function(){
Diap = setInterval(SlideShow(), 6000);
}

clipMenu.btn_pause.onRelease = function(){
clearInterval(Diap);
removeMovieClip("rebours");
}


Si vous avez des suggestions je suis preneur :)

Merci,

BBFUNK01
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
3
Merci
Hello,

bon et bien après avoir testé tout et n'importe quoi dans tous les sens j'ai enfin réussi à faire fonctionner le mode "SlideShow", je serai incapable d'expliquer pourquoi ça marche de cette manière car en fait j'ai dispatché le contenu initial de ma fonction "SlideShow()" en 2 autres fonctions que j'ai ensuite réintégré dans la fonction "SlideShow()"... il y a certainement une explication (...logique?), mais j'ai la flemme de la chercher :). En tout cas ça marche :
function Diaporama(){
function loadBitmapSmoothed(url:String, cible:MovieClip){ 
var bmc:MovieClip = cible.createEmptyMovieClip("bmc", cible.getNextHighestDepth());
trace("bmc");

var listener:Object = new Object();
trace("listener");

listener.tmc = cible;

listener.onLoadProgress = function(mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void{
var pourcentage:Number = bytesLoaded/bytesTotal*100;
if(pourcentage<100){
_root.clipRoue._visible = true;
}
if(pourcentage == 100){
trace("chargement");
_root.clipRoue._visible = false;
Wash.start();
new Tween(monClip, "_alpha", Elastic.easeOut, 0, 100, 20, true);
mx.transitions.TransitionManager.start(monClip, {type:mx.transitions.Squeeze, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});
}
}

listener.onLoadInit = function(mc:MovieClip){
trace("init");
mc._visible = false;
_root.monClip.clip2._x = _root.monClip.clip2._x-mc._width/2;
_root.monClip.clip2._y = _root.monClip.clip2._y-mc._height/2;
ZoomCalcul = new Array();
zoomTaux.text = "";

bitmap.dispose();
bitmap = new BitmapData(mc._width, mc._height, true);

this.tmc.attachBitmap(bitmap, this.tmc.getNextHighestDepth(),"auto",true); 
bitmap.draw(mc);
trace("draw");
}	

var loader:MovieClipLoader = new MovieClipLoader(); 
loader.addListener(listener); 
loader.loadClip(url, bmc);
}
if(Pos == visuels_noms.length-1){
Pos = -1;
loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos+1];
trace(Pos);
Pos = Pos+1;
trace(Pos);
}else if(Pos !== visuels_noms.length){
loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos+1];
Pos = Pos+1;
trace(Pos);
}
}

function SlideShow(){
Nettoyer();
Diaporama();
}


clipMenu.btn_play.onRelease = function(){
Diap = setInterval(SlideShow, 6000);
clipMenu.btn_pause._visible = true;
clipMenu.btn_pause.enabled = true;
clipMenu.btn_play._visible = false;
clipMenu.btn_play.enabled = false;
}


BBFUNK01

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BBFUNK01
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
Hello,
Diap = setInterval(SlideShow, 6000);


A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
0
Merci
Salut Orange73, merci pour ta réponse : effectivement ça fonctionne ainsi :
Diap = setInterval(SlideShow, 6000);

le seule souci c'est que les images ne se loadent pas, probablement parce qu'il faut que je réinitialise les variables des positions dans le xml, donc j'y travaille.

Sinonn si jamais t'as une idée pour ce problème-ci (problème bizarre d'ailleurs...);
j'ai également dans mon diaporama des commandes "précédent" et "suivant", pour gérer la boucle lorsque par exemple on clique sur "précédent" et que l'on est sur la 1ère image du xml, j'indique donc qu'il faut passer à la dernière image stockée dans le xml, comme ceci :
clipMenu.btn_prec.onRelease = function(){
clearInterval(Diap);
removeMovieClip("rebours");
removeMovieClip("contact");
removeMovieClip("informations");
clipMenu.btn_play._visible = true;
clipMenu.btn_play.enabled = true;
clipMenu.btn_pause._visible = false;
clipMenu.btn_pause.enabled = false;
if(Pos == 0){
Pos = visuels_noms.length;
}
removeMovieClip("monClip");
var clip:MovieClip = this._root.attachMovie("IDmonClip","monClip",getNextHighestDepth()+1,{_x:600,_y:328.5});
function loadBitmapSmoothed(url:String, cible:MovieClip) { 
var bmc:MovieClip = cible.createEmptyMovieClip("bmc", cible.getNextHighestDepth()); 

var listener:Object = new Object();

listener.tmc = cible;

listener.onLoadProgress = function(mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void{
var pourcentage:Number = bytesLoaded/bytesTotal*100;
if(pourcentage<100){
_root.clipRoue._visible = true;
}
if(pourcentage == 100){
_root.clipRoue._visible = false;
Wash.start();
new Tween(monClip, "_alpha", Elastic.easeOut, 0, 100, 20, true);
mx.transitions.TransitionManager.start(monClip, {type:mx.transitions.Squeeze, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});
}
}

listener.onLoadInit = function(mc:MovieClip){
mc._visible = false;
_root.monClip.clip2._x = _root.monClip.clip2._x-mc._width/2;
_root.monClip.clip2._y = _root.monClip.clip2._y-mc._height/2;
ZoomCalcul = new Array();
zoomTaux.text = "";

bitmap.dispose();
bitmap = new BitmapData(mc._width, mc._height, true);

this.tmc.attachBitmap(bitmap, this.tmc.getNextHighestDepth(),"auto",true); 
bitmap.draw(mc);
}	

var loader:MovieClipLoader = new MovieClipLoader(); 
loader.addListener(listener); 
loader.loadClip(url, bmc);
}
loadBitmapSmoothed(folder + visuels_noms[i, Pos-1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos-1];
Pos = Pos-1;
}

... et ça marche nickel :)

J'ai donc fait l'inverse sur le bouton "suivant" :
clipMenu.btn_suiv.onRelease = function(){
clearInterval(Diap);
removeMovieClip("rebours");
removeMovieClip("contact");
removeMovieClip("informations");
clipMenu.btn_play._visible = true;
clipMenu.btn_play.enabled = true;
clipMenu.btn_pause._visible = false;
clipMenu.btn_pause.enabled = false;
removeMovieClip("monClip");
var clip:MovieClip = this._root.attachMovie("IDmonClip","monClip",getNextHighestDepth()+1,{_x:600,_y:328.5});
function loadBitmapSmoothed(url:String, cible:MovieClip) { 
var bmc:MovieClip = cible.createEmptyMovieClip("bmc", cible.getNextHighestDepth()); 

var listener:Object = new Object();

listener.tmc = cible;

listener.onLoadProgress = function(mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void{
var pourcentage:Number = bytesLoaded/bytesTotal*100;
if(pourcentage<100){
_root.clipRoue._visible = true;
}
if(pourcentage == 100){
_root.clipRoue._visible = false;
Wash.start();
new Tween(monClip, "_alpha", Elastic.easeOut, 0, 100, 20, true);
mx.transitions.TransitionManager.start(monClip, {type:mx.transitions.Squeeze, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});
}
}

listener.onLoadInit = function(mc:MovieClip){
mc._visible = false;
_root.monClip.clip2._x = _root.monClip.clip2._x-mc._width/2;
_root.monClip.clip2._y = _root.monClip.clip2._y-mc._height/2;
ZoomCalcul = new Array();
zoomTaux.text = "";

bitmap.dispose();
bitmap = new BitmapData(mc._width, mc._height, true);

this.tmc.attachBitmap(bitmap, this.tmc.getNextHighestDepth(),"auto",true); 
bitmap.draw(mc);
}	

var loader:MovieClipLoader = new MovieClipLoader(); 
loader.addListener(listener); 
loader.loadClip(url, bmc);
}
if(Pos == visuels_noms.length){
Pos = -1;
loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos+1];
trace(Pos);
Pos = Pos+1;
trace(Pos);
}else if(Pos !== visuels_noms.length){
loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos+1];
Pos = Pos+1;
trace(Pos);
}
}

... là ça marche aussi, seulement lorsque l'on est sur la dernière image stockée dans le xml et que l'on clique sur le bouton, cela me met "undefined", et si on clique encore une fois, et bien c'est bon ça affiche la 1ère image stockée dans le xml, pourtant je réintialise bien la position dans mon xml :
if(Pos == visuels_noms.length){
Pos = -1;
loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos+1];
trace(Pos);
Pos = Pos+1;
trace(Pos);
}

Je mets "Pos = -1" car dans la fonction je loade "Pos+1", donc 0, donc la 1ère donnée de mon Array, bref bizarre tout ça.

Bon en tout cas ça se précise et j'espère avoir terminé bientôt.

Merci,

BBFUNK01
Commenter la réponse de BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
0
Merci
Je viens de trouver pour mon bouton "suivant", en fait il faut enlever 1 à la longueur du tableau (normal finalement vu que le tableau commence à 0 :) ):
if(Pos == visuels_noms.length-1){
Pos = -1;
loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
clipMenu.designation.text = visuels_titres[i, Pos+1];
trace(Pos);
Pos = Pos+1;
trace(Pos);
}


comme ça ça marche.

Pour mon setInterval en tout cas ma fonction LoadBitmapSmoothed() ne fonctionne pas :(, je n'ai que le texte dynamique qui est chargé suivant le xml, mais pas les images.

BBFUNK01
Commenter la réponse de BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
0
Merci
Bon et bien voici ma conclusion :

- quand je mets sur mon bouton "play" :
Diap = setInterval(SlideShow, 6000);

ça me lance un seul intervalle (donc une seule image).

- quand je mets sur mon bouton "play":
Diap = setInterval(SlideShow(), 6000);

ça me lance bien ma fonction SlideShow() en boucle, mais il n'y a que mon champ de texte dynamique qui affiche les noms de mes images, mes images ne sont pas loadées.

Bref, ça me laisse pantois tout ça :0

BBFUNK01
Commenter la réponse de BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
0
Merci
...euh...

j'ai inversé les fonctions et leurs résultats :) :
Diap = setInterval(SlideShow(), 6000);

ne me lance qu'un intervalle.

BBFUNK01
Commenter la réponse de BBFUNK01