Gallerie Flash

paulito47
Messages postés
8
Date d'inscription
jeudi 3 septembre 2009
Statut
Membre
Dernière intervention
28 juillet 2011
- 28 juil. 2011 à 02:08
aerolyte
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
- 29 juil. 2011 à 01:37
Bonjour à tous,

je travaille actuellement sur une gallerie photos.
J'affiche les miniatures qui permettront par la suite de voir l'image voulue en grand, ceci à partir d'un fichier XML.
J'ai mis un scroll vertical afin de pouvoir voir toutes les miniatures.
Mon scroll marche correctement néanmoins il ne me permet pas de voir toutes les miniatures.

Voici le code:

import fl.containers.UILoader;
import caurina.transitions.*;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import com.greensock.TweenMax;

var urlRequest:URLRequest = new URLRequest("pics.xml");
var urlLoader:URLLoader = new URLLoader();
var myXML:XML = new XML();
var xmlList:XMLList;
myXML.ignoreWhitespace = true;
urlLoader.addEventListener(Event.COMPLETE,fileLoaded);
urlLoader.load(urlRequest);


var arrayURL:Array = new Array();

var arrayName:Array = new Array();

var holderArray:Array = new Array();

var nrColumns:uint = 5;


var thumb:Thumbnail;
var photoContainer:Sprite = new Sprite();
addChild(photoContainer);
photoContainer.mask=thumb_holder;


function fileLoaded(event:Event):void {
myXML = XML(event.target.data);
xmlList = myXML.children();
for (var i:int=0; i<xmlList.length(); i++) {
var picURL:String = xmlList[i].url;
var picName:String = xmlList[i].big_url;
arrayURL.push(picURL);
arrayName.push(picName);
holderArray[i] = new Thumbnail(arrayURL[i],i,arrayName[i]);
holderArray[i].name = arrayName[i];
holderArray[i].buttonMode = true;

holderArray[i].addEventListener(MouseEvent.CLICK,onClick);
if (i<nrColumns) {
holderArray[i].y = 65;
holderArray[i].x = i*110+65;
}

else {
holderArray[i].y = holderArray[i-nrColumns].y+110;
holderArray[i].x = holderArray[i-nrColumns].x;
}
photoContainer.addChild(holderArray[i]);
}
}

function thumbLoaded(e:Event):void {
var my_thumb:Loader = Loader(e.target.loader);
photoContainer.addChild(my_thumb);
my_thumb.contentLoaderInfo.removeEventListener(Event.COMPLETE, thumbLoaded);
}

//----handles the Click event added to the thumbnails--
function onClick(event:MouseEvent):void {
var test = event.currentTarget.name;
trace(test);
//Tweener.addTween(photoContainer, {x:-650, time:1, transition:"easeInElastic"});
//Tweener.addTween(photoContainer, {alpha:0, time:1, transition:"linear"});
}

var bounds:Rectangle;
var startY:Number;
var contentY:Number;

scrollHandle.addEventListener(MouseEvent.MOUSE_DOWN, drag);
scrollBar.addEventListener(MouseEvent.CLICK, tween);
addEventListener(Event.ENTER_FRAME, moveBox);
startY = scrollHandle.y;
contentY = photoContainer.y;
bounds = new Rectangle(scrollHandle.x, scrollHandle.y, 0, scrollBar.height - (scrollHandle.height + 4));


function tween(e:MouseEvent):void{
var mousePos:Number = mouseX;
if(mousePos > (scrollBar.y + scrollBar.height) - (scrollHandle.height + 4)){
mousePos = (scrollBar.y + scrollBar.height) - (scrollHandle.height + 4);
}
Tweener.addTween(scrollHandle, {y: mousePos, time: 1});
}

function drag(e:MouseEvent):void{
scrollHandle.startDrag(false, bounds);
scrollHandle.gotoAndStop(2);
scrollHandle.removeEventListener(MouseEvent.MOUSE_DOWN, drag);
addEventListener(MouseEvent.MOUSE_UP, stopdrag);
}

function stopdrag(e:MouseEvent):void{
scrollHandle.stopDrag();
scrollHandle.gotoAndStop(1);
scrollHandle.addEventListener(MouseEvent.MOUSE_DOWN, drag);
removeEventListener(MouseEvent.MOUSE_UP, stopdrag);
}

function moveBox(e:Event):void{
TweenMax.to(photoContainer, 2, {y: -((contentY - startY) + scrollHandle.y) / ((photoContainer.height - thumb_holder.height) / (scrollBar.height - scrollHandle.height))});
}

Je peux éventuellement fournir le fla.

1 réponse

aerolyte
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
29 juil. 2011 à 01:37
Bonjour,

import fl.containers.UILoader; // tiens voici une classe que je connais pas, quel est la différence avec URLLoader ou Loader? 
import caurina.transitions.*; 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.geom.Rectangle; 
import com.greensock.TweenMax;

var urlRequest:URLRequest=new URLRequest("pics.xml"); 
var urlLoader:URLLoader=new URLLoader(); 
var myXML:XML=new XML(); 
//var xmlList:XMLList; inutile
myXML.ignoreWhitespace=true; 
urlLoader.addEventListener(Event.COMPLETE,fileLoaded); 
urlLoader.load(urlRequest); 

// trop de array tu le array, a mon avis une seul suffit surtout si tu les utilise comme des vectors
//var arrayURL:Array=new Array(); 
//var arrayName:Array=new Array(); 
var holderArray:Array=new Array(); 

// ici il faut utiliser une constante typer int
//var nrColumns:uint=5; 
const nrColumns:int=5; 

var thumb:Thumbnail; 
var photoContainer:Sprite=new Sprite(); 
addChild(photoContainer); 
photoContainer.mask=thumb_holder; 

function fileLoaded(event:Event):void{
myXML=XML(event.target.data); 
var imax:int=myXML.children.length();
//xmlList=myXML.children(); 
//declare tes variables avant la boucle bien qu'ici tout ca est inutile
//var picURL:String,picName:String;
for(var i:int=0;i(scrollBar.y+scrollBar.height)-(scrollHandle.height+4)){ 
mousePos=(scrollBar.y + scrollBar.height)-(scrollHandle.height + 4); 
}
//Mélanger des tweener et des TweenMax c'est pas bien, je te conseille de tout faire avec les Tweener, c'est la meilleur solution
Tweener.addTween(scrollHandle,{y:mousePos,time:1}); 
} 
function drag(e:MouseEvent):void{
scrollHandle.removeEventListener(MouseEvent.MOUSE_DOWN,drag); 
scrollHandle.startDrag(false,bounds); 
scrollHandle.gotoAndStop(2); 
addEventListener(MouseEvent.MOUSE_UP,stopdrag); 
} 
function stopdrag(e:MouseEvent):void{ 
removeEventListener(MouseEvent.MOUSE_UP,stopdrag); 
scrollHandle.stopDrag(); 
scrollHandle.gotoAndStop(1); 
scrollHandle.addEventListener(MouseEvent.MOUSE_DOWN,drag); 
} 
function moveBox(e:Event):void{ 
TweenMax.to(photoContainer,2,{y:-((contentY-startY)+scrollHandle.y)/((photoContainer.height-thumb_holder.height)/(scrollBar.height-scrollHandle.height))}); 
} 
0