Bonjoir,
 
je suis en train de faire un petit diaporama de recettes de cuisine en Flash/AS3, et j'ai 3 2 1 questions pour les spécialistes.
 
Le programme charge la liste d'images (depuis xml) dans un scrollbar horizontal, et laisse l'utilisateur cliquer sur les images de recettes qui l'intéressent afin de charger la dite recette en HTML au-dessus du diaporama. Chaque nouveau clic entraine la modification de la zone HTML et son remplacement par une nouvelle recette SANS RECHARGEMENT de la page.
 
Mon fichier xml contient la liste des images, chaune d'entre elles possede 2 propriétés : un chemin (celui du fichier image sur disque) et un ID (celui de la recette HTML que je recupèrerai plus tard)
 
1. Je cherche à associer chaque image dans AS3 à chaque ID dans xml, de telle sorte qu'au clic je puisse récupérer le fameux ID et chercher après la bonne recette.
Mes images sont des instances de Loader, je parcours mon xml et charge chaque image grâce à son loader dédié :
| Code : 
 /* Chargement du xml */private function loadImagesPath():void{  	var urlLoader:URLLoader = new URLLoader(); //conteneur de chargement du fichier XML
  	urlLoader.addEventListener(Event.COMPLETE, loadImagesPathCompleted); //abonnement à l'événement Event.COMPLETE
  	urlLoader.addEventListener(IOErrorEvent.IO_ERROR, loadImagesPathIoError); //abonnement à l'événement IOErrorEvent.IO_ERROR
  	urlLoader.load(new URLRequest("xml/RecipeSlideshow.xml" )); //chargement du fichier XML
}/* Chargement des images */private function loadImagesPathCompleted(evt:Event):void{  	xml = new XML(evt.target.data); //Récupération du flux XML
  	xmlList = xml.elements(); //Récupération de la liste des noeuds image
  	for each(var image:XML in xmlList)  	{    var loader:Loader = new Loader(); //conteneur pour chaque image
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImageCompleted); //abonnement à l'événement Event.COMPLETE
    loader.load(new URLRequest(image.@path)); //chargement de l'image
  	}}/* Chargement de chaque image */private function loadImageCompleted(evt:Event):void{  	thumbsContainer.addEventListener(Event.ADDED, imageAdded); //abonnement du conteneur des vignettes à l'événement Event.ADDED
  	var loader:Loader = evt.target.loader; //conteneur de l'image
  	loader.width = 135; //largeur de la vignette
  	loader.height = 105; //hauteur de la vignette
  	thumbsContainer.addChild(loader); //ajout de la vignette dans le conteneur
}/* Positionnement des images et callback sur clic souris */private function imageAdded(evt:Event):void{  	var loader:Loader = evt.target as Loader; //la vignette qui est ajoutée
  	var conteneur:Sprite = evt.currentTarget as Sprite; //le conteneur des vignettes
  	var index:int = conteneur.getChildIndex(loader); //l'index dans la liste d'affichage
  	if(index != 0) //si la vignette n'est pas la première
  	{    var previousX:Number = conteneur.getChildAt(index - 1).getBounds(conteneur).right; //coordonnée X du côté droit de la vignette précédemment ajoutée
    loader.x = previousX + SPACE_BETWEEN_THUMBS; //positionnement de la vignette 10 pixels après la vignette précédente
  	}  	loader.addEventListener(MouseEvent.CLICK, vignetteClic); //abonnement à l'événement clic
}/* Listener de clic souris */private function vignetteClic(evt:MouseEvent):void{  	var loader:Loader = evt.target as Loader;}
 | 
Je ne sais pas du tout à quel objet associer mon ID (image.@id). J'ai essayé de rajouter une propriété "id" au Loader pour la récupérer au clic, mais la classe Loader m'en empêche. ![[:airforceone] [:airforceone]](https://forum-images.hardware.fr/images/perso/airforceone.gif) 
 
 
 
2. Le clic sur une image entraine l'affichage de la recette, mais j'ai pour imperatif de ne pas recharger la page (et donc le Flash) à chaque clic. Je suppose qu'il faut passer par une couche JS depuis laquelle je ferais un appel "AJAX" afin de charger le contenu. Est-ce la bonne demarche ? Sachant que je ne sais pas (encore) si Flash est capable de lancer un script JS...
 
 
3. Il faudrait que l'url soit dédiée à chaque recette, sans pour autant recharger le contenu à chaque appel. SWFaddress est-il mon ami dans ce cas ?
 
 
Posez-moi des questions sur les points pas clairs, j'essaierai (compte-tenu de mon pov' niveau en AS) de vous répondre ![[:bbcmoi] [:bbcmoi]](https://forum-images.hardware.fr/images/perso/bbcmoi.gif)
 
Message édité par lkolrn le 15-02-2009 à 23:51:18