Comunidad de diseño web y desarrollo en internet online

PAginacion en Galeria

Citar            
MensajeEscrito el 12 Mar 2009 07:08 pm
Bien para empezar un grato saludos a todos y un abrazo fraternal, pues bien sin mas preambulo expongo mi caso...

Estoy desarrollando una Galeria de imagenes en AS3 cargando las imagenes desde un XML, bien todo iba bien en el proceso hasta que tuve la necesitada de paginar, despues de buscar un rato termine de calcular la paginacion pero me tope con un problema yo defino un Maximo de Fotos a mostrar por PAgina en este caso 10, de hecho me muestra las 10 primeras, pero el detalle es que cuando le doy al boton de NEXT para que me muestre las fotos del 11 al 19 necesito remover las 10 primeras y volver a crear los loader que van dentro del cada MC que stoy mandando llamar.. bien a mi se me hizo facil usar el REMOVECHILD, pero algo sucede que me devuelve un error. A continuacion el Codigo:

import flash.display.MovieClip;
import flash.net.*;
import flash.events.Event;
import flash.display.Loader;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.display.LoaderInfo;
import gs.TweenLite;
import gs.easing.*;

var MyXML:XML = new XML;
var uRLLoader:URLLoader = new URLLoader();
var Files:String = "MyGal.xml";

var offsetposX:Number = 15;
var posthumsX:Number;

var Maxvisible:Number= 10;
var NumTotalPics:Number;
var NumTotalPages:Number;
var ValorInit:Number=0;
var ValorFin:Number= Maxvisible;
var currentPage:Number = 1;
var currentGal:Number = 0;
var myThums:MovieClip;
var val:Boolean;

var objLoader:Loader;
var objFileToLoad:URLRequest;


LoadXML(Files);
//ARRAY
var Arr_thums:Array = new Array();
var Arr_gdes:Array = new Array();

function LoadXML(file:String) {
MyXML.ignoreWhitespace = true;
uRLLoader.load(new URLRequest(file));
uRLLoader.addEventListener(Event.COMPLETE,LoadArray);
}//END LoadXML

function LoadArray(event:Event):void {
var urLoader:URLLoader = event.target as URLLoader;

if (urLoader != null) {
MyXML =new XML(urLoader.data);

var i:Number=0;
var j:Number=0;

//trace(MyXML.child("galeria")[0].elements("thums").length());
//trace(MyXML.elements("galeria").attribute("nombre"));
var numThums:Number = MyXML.child("galeria")[0].elements("thums").length();
var numGdes:Number = MyXML.child("galeria")[0].elements("gde").length();
//trace("numGdes = "+numGdes);



//CALCULAMOS EL NUMERO TOTAL DE LAS FOTOS
NumTotalPics = numThums;
//SACAMOS EL TOTAL DE PAGINAS SEGUN EL NUMERO DE FOTOS
NumTotalPages= Math.floor(NumTotalPics/Maxvisible);



//trace("numThums = "+numThums);
//trace("NumTotalPages = "+NumTotalPages);

//for (var i:Number = 0;h<numThums;i++)
//for each (var numGal:XML in MyXML.elements())
for each (var numGal:XML in MyXML.elements()) {

Arr_thums[i] = new Array();
Arr_gdes[i] = new Array();

j=0;

//FOR PARA EXTRAER LAS IMG GDES
for each (var numGde:XML in numGal.elements("gde")) {

Arr_gdes[i][j] = numGde;
}
//FOR PARA EXTRAER LOS THUMS
for each (var numPic:XML in numGal.elements("thums")) {

myThums = new mc_vacio();
Arr_thums[i][j] = myThums;
Arr_thums[i][j].myPic = numPic;

//trace(Arr_thums[0][j].myPic);

myThums.Id=j;
myThums.buttonMode = true;

if (j==0) {
posthumsX=5;

} else {
posthumsX = (Arr_thums[i][j-1].x+Arr_thums[i][j-1].width)+offsetposX;
}
myThums.x = posthumsX;
myThums.y = 3;
myThums.alpha = 0;

//myThums.addEventListener(MouseEvent.CLICK,loadimgGde);

if ( ValorInit <= j && j < ValorFin) {

//AQUI ES DONDE MANDO CARGAR LAS PRIMERAS 10 FOTOS PARA MOSTRAR CON LA FUNCION loadTums
//numPic me devuelve todas las etiquetas "thums" que tiene mi XML


loadThums(numPic,myThums,j);
//holder_thums.addChild(myThums);
//TweenLite.to(myThums,1,{alpha:1,delay:(j*0.4)});
}
//trace(j);
j++;
//trace("j = "+j);
}//FOR EACH PARA SACAR EL NUMERO DE FOTOS POR GALERIA
i++;

}//FOR EACH PASA SABER CUANTAS GALERIAS TIENE EL XML
} else {
trace("no carga el XML");
}
}//END LoadArray

//PROPIEDADES A LAS FLECHAS PARA PAGINAR LOS THUMS
prev_mc.buttonMode = true;
next_mc.buttonMode = true;

prev_mc.addEventListener(MouseEvent.CLICK,prevPage);
next_mc.addEventListener(MouseEvent.CLICK,nextPage);

//==========================//

//========FUNCTIONES PARA PAGINAR CON LOS BOTONES DE LOS THUMS=========//
function prevPage(event:MouseEvent):void {
trace("previo");

}
function nextPage(event:MouseEvent):void {
//CALCULO EL VALOR FINAL QUE SERA EL QUE ME GUIE PARA CARGAR LOS THUMS DEL 11 AL 20
ValorFin = Math.floor(Maxvisible*NumTotalPages);
//INCREMENTO LA PAGINA
currentPage++;
//COMPRUEBO SI LA PAGINA ES MAYOR QUE IGUAL A 2
if (currentPage>=2) {
//REASIGNO EL VALOR DE LA VARIABLE PARA QUE ME DE EL SIGUIENTE RANGO DE PICTURES QUE SON APARTIR DE 10
ValorInit = (currentPage-1)*Maxvisible;
}
trace("ValorInit = "+ValorInit+" "+"ValorFin = "+ValorFin);

//CREO UN FOR PARA MANDAR CARGAR LAS SIGUIENTES IMAGENES
for(var R:Number = ValorInit; R<ValorFin; R++){;

//VARIABLE DE VALIDACION
val = false;


loadThums(Arr_thums[currentGal][R].myPic,Arr_thums[currentGal][R],R);

}

}
//===============================================================//
//===============================================================//
//AQUI ES LA FUNCION QUE SE ENCARGA DE CREAR AL LOADER QUE VA DENTRO DE CADA MC QUE MANDO LLAMAR DE MI //LIBRERIA LA PRIMERA VEZ QUE ENTRA LA FUNCION LOS CREA Y NO HAY PROBLEMA EL DETALLE COMO MENCIONE VIENE
//EN LA FUNCION nextPage PORQUE ES DONDE TENGO QUE VALIDAR SI YA ESTAN ADHERIDOS LOS MC DE MI LIBRERIA
//DENTRO DE holder_thums QUE ES UN MC QUE YA ESTA EN EL SCENARIO ENTONCES SI YA EXISTEN QUE LOS REMUEVA
//PARA CREAR LOS NUEVOS MC Y LOADERS QUE VA A CREAR SEGUN LA FUNCION nextPage



function loadThums(img:String, holder:MovieClip, n:Number){


//SEGUN LEI E HICE UNA PRUEBA CON ESTA INSTRUCCION PUEDES REMOVER LOS HIJOS ADHERIDOS A UN MC, PERO EL //DETALLE ES QUE ESTO ME DEVUELVE ( The supplied DisplayObject must be a child of the caller. ) Y ES DONDE NO //ENTIENDO,


//holder_thums.removeChild(holder);

holder_thums.addChild(holder);
TweenLite.to(holder,1,{alpha:1,delay:(n*0.4)});





var loader:Loader = new Loader();
loader.load(new URLRequest(img));
loader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
holder.addChild(loader);
}

function onInit(e:Event):void {
//trace("inica");
}

function loadProgress(e:ProgressEvent):void {
//trace("procesa");
//trace("progressHandler: bytesLoaded=" +e.bytesLoaded + " bytesTotal=" + e.bytesTotal);
}



Bien se despide un colega que esta apunto del suicido y de la histeria total... muchas gracias de antemano por leer este post y pronto subire unas librerias que eh creado para el deleite de todos ustedes...

Muchas Gracias y espero sus Comentarios con alguna ayuda o tutorial

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Mar 2009 07:56 am
Idgmmorales, si el problema es sólo que no sabes cómo eliminar los MCs no hace falta que pongas todo e. código, sino sólo las partes importantes. Lo digo porque muchas veces los post con tanto código llegan a marear.
Yo tampoco me lo he leído del todo y lo veo muy liado, así que, ya que cargas todas las imágenes dentro de "holder_thums". Lo que deberías hacer, ANTES de mandar cargar una nueva página eliminar todos los que haya

Código ActionScript :

while (holder_thums.numChildren>1){
  holder_thums.removeChildAt(0)
}

Eso es como idea general, Tratando de ver un poco tu función

Código ActionScript :

//en un momento dado llamas a
loadThums(Arr_thums[currentGal][R].myPic,Arr_thums[currentGal][R],R);
//y tu función es
function loadThums(img:String, holder:MovieClip, n:Number){
   holder_thums.removeChild(holder);
   ....
   holder_thums.addChild(holder);

La verdad es que no lo entiendo, No puedes eliminar de la displayList un MC (llamaló DisplayObject cualquiera) si no lo has añadido antes. Supongo que quieres eliminar el anterior y crear uno nuevo, algo del tipo

Código ActionScript :

loadThums(Arr_thums[currentGal][R].myPic,Arr_thums[OTRO][R],Arr_thums[currentGal][R],R);
//y tu función
function loadThums(img:String, holder_antiguo:MovieClip,holder:MovieClip, n:Number){
   holder_thums.removeChild(holder_antiguo);
   ....
   holder_thums.addChild(holder);
}

Pero ya te digo que no sé exactamente qué pretendes hacer


NOTA:AS.3 ya usa la notación ECMA 4 para los XML, a´si que puedes escribir simplemente, p.e.

Código ActionScript :

numGal.thums
//en lugar de 
numGal.elements("thums")
//y
numGal.gde
//en lugar de
numGal.elements("gde")

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Mar 2009 08:52 pm
Muchas Gracias por tu Post, realmente lo que queria hacer es:

que dentro de holder_thums se cargan unos MC que estan en la libreria y dentro de ellos el Loader con la Imagen, entonces cuando entra por primera vez la funcion loadThums solo me mostrara 10 hasta ahi todo va bien, el detalle viene cuando quiero paginar mis imagenes porque en total son 20 y por pagina se mostraran 10 asi que cuando carga va del 0 al 9 y al darle en el boton de next necesito REMOVER esos MC que se cargaron para volver a cargar los MC que van del 10 al 19, pero bueno ahora me enfrento a otro problema MAYOR, a ver si puedes ser tan amable de darme una solucion

hice un ajuste en este Script y declare un Array segun yo GLOBAL pero el detalle es que no puedo leer ese Array en otra funcion, siendo que lo que si me deja es llenarle los cambios y volverlo dimensional ejem.

var Array:Array = new Array();

function loadArray(){
aqui en esta funcion lleno el array como comunmente haciamos en AS2
array[i]=new Array();

}

function boton_next(e.MouseEvent){
esta funcion es del boton de siguiente para la paginacion de los thums

aqui yo mando llamar el array y le hago sus fors corresponiendientes para leero
pero ya me marca undefined
}

y es aqui donde estoy atorado ahora... muchas gracias por la molestia que te tomas al leer este post te agradezco tu tiempo mi nombre es mike...

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 14 Mar 2009 01:54 am
ldgmmorales: recuerda darle formato a tu código (y de paso agradecer que exista alguien como Eliseo que mire las 200 líneas de código que posteaste ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 16 Mar 2009 09:07 am
Mike, no puedes llamar a una variable "Array". Vamos, tienes escrito

Código ActionScript :

var Array:Array=new Array()

Supongo que querías poner

Código ActionScript :

var array:Array=new Array()

Vamos, ¡Vigila las mayúsculas!

Siempre que lo declares fuera de cualquier función, va a ser "global" (va a poder usarse dentro de cualquier función -método- de la clase)
NOTA:Te puse el código para remover todos los DisplayObjects (MCs, loaders, etc) de la displayList que estén dentro de un MC

Por Eliseo2

710 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.