Forum de discussion
Forum « Flash et Shockwave » (archives)
diaporama avec préchargement
Envoyé: 21 mars 2006, 18h49 par popo
je souhaite faire défiler des images.
Le chemin des images viennent d'un fichier XML.
J'ai d'un côté un tableau avec les chemins des images, et de l'autre une fonction qui fait apparaitre l'image.
Le problème est que je ne sais pas comment faire pour faire défiler les images les unes derrières les autres, en reglant la tempo. Le top du top, serait de charger l'image N+1 pdt que l'image N est affichée... est ce que qqun saurait me trouver le bout de code manquant ?
voici le code en question :
var myXML = new XML();
var nm;
myXML.ignoreWhite = true;
var maxi_nm ;
// Fonction pour initialiser les champs d'affichage du préchargement.
_global.initCompteur = function () {
_root.total.text = 0 + " ko" ; // initialisation du champ total
_root.charge.text = 0 +" ko"; // initialisation du champ charge
_root.pourcent.text = 0 + " %"; // initialisation du champ pourcent
_root.nom.text = "" ; // initialisation du champ nom
}
// Prototype pour un exemple d'effet d'alpha progressif pour faire apparaitre l'image lentement une fois chargée
// On peut remplacer cet effet par tout autre ou même le supprimer.
MovieClip.prototype.effect = function (vitesse) {
this.onEnterFrame = function () {
if (this._alpha < 100) {
this._alpha += vitesse ; // on incrémente l'alpha du clip contenant l'image
} else {
this._alpha = 99 ; // on ne met pas 100 pour éviter le bug d'affichage de flash
delete this.onEnterFrame ; // on détruit la boucle
}
}
}
MovieClip.prototype.preloadImage = function ( url , methode) {
// création d'un clip temporaire pour lancer le préchargement
_root.createEmptyMovieClip("clipTemp" , -9999 ) ;
// on détermine le nom du clip où l'on charge l'image pour le ciblage
_root.clipTemp.nom = this ;
// on détermine les évènements du préchargement qui se lancera à l'ouverture du clip temporaire
_root.clipTemp.onLoad = function () {
initCompteur () ; // Mise à jour de l'affichage
_root.nom.text = url ; // on affiche le nom de l'image
this.onEnterFrame = function() {
this.total = Math.round(this.nom.getBytesTotal()/1024); // on divise par 1024 car on cherche à afficher les ko et non le nombre de bytes
_root.total.text = this.total +" ko"; // mise à jour de l'affichage du TextField total
this.lu = Math.round(this.nom.getBytesLoaded()/1024);
_root.charge.text = this.lu +" ko"; // mise à jour de l'affichage du TextField charge
this.pourcent = Math.round((this.lu/this.total)*100) ;
_root.pourcent.text = this.pourcent + " %"; // mise à jour de l'affichage du TextField pourcent
if (this.pourcent == 100) { // si le préchargement est terminé :
this.nom._alpha = 0 ; // on rend invisible l'image en mettant un alpha nul sur le clip qui contient celle ci.
this.nom.Effect (10) ; // on lance l'effet avec une vitesse de 10 pour afficher l'image
delete this.onEnterFrame ; // on détruit la boucle infinie appliquée sur le clip temporaire
this.removeMovieClip() ; // on détruit le clip temporaire
}
}
}
// chargement de l'image selon les paramètres défini par l'utilisateur
this.loadMovie( arguments[0],arguments[1]);
// Lancement du préchargement de l'image
_root.clipTemp.onLoad () ;
}
//fonction de chargement de l'image
display = function ( url ) {
createEmptyMovieClip("clip",1); // création d'un clip qui contiendra l'image à charger qui porte comme nom d'occurence "clip"
clip.onLoad = function () { // fonction qui défini ce qui se passe quand le clip "clip" est chargé.
this._x = 1 ; // on place le clip selon _x = 100 sur l'animation principale.
this._y = 1 ; // on place le clip selon _y = 100 sur l'animation principale.
this.preloadImage (url) ; // on lance le chargement de l'image et de son préchargement
this._visible = false ; // on rend invible le clip (on ne sait jamais :) Peut servir si on charge une autre image
}
clip.onLoad(); // on lance le chargement quand on le clip est chargé aprés sa création.
}
myXML.onLoad = function(success) {
if (success)
{if (myXML.loaded && myXML.hasChildNodes)
{_root.flyer = new Array();
if (myXML.firstChild.nodeName.toLowerCase() == "flyer")
{nm = myXML.firstChild.childNodes;
maxi_nm = nm.length ;
for (i=0; i<=nm.length; i++)
{ if (nm[i].nodeName == "flyer_img")
{ _root.flyer.push(nm[i].attributes.img_name);
//_root.slide_titles.push(nm[i].firstChild.nodeValue);
}
}
}
}
}
//trace ("max vignettes:" + maxi_nm)
for (i=0; i<nm.length; i++)
{
// affichage des images à la suite ??
display(_root.flyer[i]);
}
};
myXML.load("flyer.xml");
// Fin du Script.
Réponses
|