Hace unos meses que estoy haciendo una pagina web que lleva una galeria de imagenes, asi que me descargue un tutorial que estaba muy bien en el que se cargan las fotos de un archivo xml y pone las minis en un lado y al pincharles encima aparece la foto en grande. El proble surge cuando pincho en otro apartado de mi pagina porque si hago un unloadMovie de las imagenes minis al volver a cargar la galeria me desaparece el marco donde estan las fotos y aparecen fotos por toda la pagina. Como puedo hacer para que vuelva a cargar el marco?
Aqui dejo el codigo para cargar la galeria:
Código:
System.useCodepage = true; XML.prototype.ignoreWhite = true; import mx.transitions.Tween; // separacion-> distancia entre las imágenes // tanto horizontal como vertical var separacion:Number = 130; // vbles para pasar de página var pagina_actual:Number = 1; var num_paginas:Number; // array donde metemos los elementos del XML var IMG_array:Array; // objeto XML que carga la lista de miniaturas var miniaturasXML:XML = new XML(); miniaturasXML.onLoad = mostrarMiniaturas; miniaturasXML.load("/asp/verMiniaturas.php"); // funcion que se ejecuta al cargar el XML function mostrarMiniaturas():Void { // contadores de columna y fila para // disponer las miniaturas var fila:Number = 0; var col:Number = 0; // paso los datos del XML al array IMG_array = this.firstChild.childNodes; // como caben 12 fotos por página podemos // saber el núm de páginas necesarias para // mostrar todas las fotos num_paginas = Math.ceil(IMG_array.length/12); // creo el clip donde meteremos todas las miniaturas var lienzo:MovieClip = _root.createEmptyMovieClip("lienzo_miniaturas", _root.getNextHighestDepth()); lienzo.cacheAsBitmap = true; // lo posiciono donde nos conviene lienzo._x = 470; lienzo._y = 116; // y lo enmascaro con el clip situado en la // capa mascara. se enmascara para hacer el deslizamiento del // clip cuando tengamos muchas miniaturas y no entren todas a // la vez en pantalla (nuestro caso) lienzo.setMask(mascara_mc); // recorro el array que contiene la lista con los nombres de // los archivos de las miniaturas e invoco la función crearMiniatura // que es la que carga la imagen, la recoloca, le pone un pequeño // marco y le asigna las acciones para verla ampliada for (var k:Number = 0; IMG_array[k]; k++) { // extraigo la ruta del archivo de imagen //var ruta:String = "minis/"+IMG_array[k].attributes.nombre; // como sólo tengo tres columnas, cuando llegue a // la tercera, avanzo una fila y retorno a la primera if (col>2) { col = 0; fila++; } // creo la miniatura. extraigo la ruta del archivo de imagen // y la paso como tercer parámetro crearMiniatura(col, fila, IMG_array[k].attributes.nombre); col++; } } function crearMiniatura(columnaF:Number, filaF:Number, ruta:String) { // bajo_clip es el clip que contendrá el marco de la miniatura var bajo_clip:MovieClip = lienzo_miniaturas.createEmptyMovieClip("bajo_"+filaF+"_"+columnaF, lienzo_miniaturas.getNextHighestDepth()); // clip contendrá la imagen var clip:MovieClip = lienzo_miniaturas.createEmptyMovieClip("foto_"+filaF+"_"+columnaF, lienzo_miniaturas.getNextHighestDepth()); // para cargar la miniatura definimos un objeto MovieClipLoader // y un objeto detector de eventos var mi_mcl:MovieClipLoader = new MovieClipLoader(); var miListener:Object = new Object(); mi_mcl.addListener(miListener); clip.valor = "aaa"; // cargamos la imagen mi_mcl.loadClip("/minis/"+ruta, clip); miListener.onLoadStart = function(target_mc:MovieClip) { // cuando comienza la carga de la imagen // ponemos al _alpha a 0 target_mc._alpha = 0; }; miListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number) { // aquí podéis poner acciones para mostrar una precarga, // este caso no lo hemos considerado oportuno }; // cuando ya se ha completado la carga y tenemos disponible el clip miListener.onLoadInit = function(target_mc:MovieClip) { // recolocamos la imagen (todavía está oculta, con _alpha=0) target_mc._x = (separacion*columnaF)+(100-target_mc._width)*0.5; target_mc._y = (separacion*filaF)+(100-target_mc._height)*0.5; // recolocamos el marco que rodea a la foto bajo_clip._x = target_mc._x-5; bajo_clip._y = target_mc._y-5; // dibujamos el marco with (bajo_clip) { beginFill(0xffffff); lineStyle(1, 0xEEEEEE, 100); lineTo(target_mc._width+10, 0); lineTo(target_mc._width+10, target_mc._height+10); lineTo(0, target_mc._height+10); lineTo(0, 0); endFill(); } // al pinchar sobre el área del marco, // mostramos la foto grande con la función // verFotoGrande bajo_clip.onRelease = function() { verFotoGrande(ruta); }; // muestro la miniatura animando el _alpha hasta 100 var myTween:Tween = new Tween(target_mc, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, 2, true); }; } function verFotoGrande(ruta:String) { clearInterval(intervaloColor); // creo el clip donde irá la foto grande en una profundidad fija // para que se reemplace cada vez que pincho en una miniatura var grande:MovieClip = _root.createEmptyMovieClip("grande_mc", 2*IMG_array.length+11); // igual con el clip que contendrá el marco var bajo_grande:MovieClip = _root.createEmptyMovieClip("bajo_grande_mc", 2*IMG_array.length+10); // posición vertical fija grande._y = 150; // para cargar la foto grnade definimos otro objeto MovieClipLoader // y otro objeto detector de eventos var grande_mcl:MovieClipLoader = new MovieClipLoader(); var grandeListener:Object = new Object(); grande_mcl.addListener(grandeListener); // cargo la foto grande grande_mcl.loadClip("/originales/"+ruta, grande); grandeListener.onLoadStart = function(target_mc:MovieClip) { // aplico una transformación de color que deja el clip // tintado de blanco myColor = new Color(target_mc); myColorTransform = new Object(); myColorTransform = {ra:100, rb:255, ga:100, gb:255, ba:100, bb:255, aa:100, ab:0}; myColor.setTransform(myColorTransform); }; grandeListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number) { // aquí podéis poner acciones para mostrar una precarga, // este caso no lo hemos considerado oportuno }; grandeListener.onLoadInit = function(target_mc:MovieClip) { //trace("grandeListener.onLoadInit"); // recolocamos la imagen (todavía está oculta) target_mc._x = 60+Math.round((315-target_mc._width)*0.5); // recolocamos el marco que rodea a la foto grande bajo_grande._x = target_mc._x-5; bajo_grande._y = target_mc._y-5; // dibujamos el marco with (bajo_grande) { beginFill(0xffffff); lineStyle(1, 0xEEEEEE, 100); lineTo(target_mc._width+10, 0); lineTo(target_mc._width+10, target_mc._height+10); lineTo(0, target_mc._height+10); lineTo(0, 0); endFill(); } // con estas rutinas hacemos la transición de color desde el blanco var indiceColor:Number = 255; intervaloColor = setInterval(cambiarColor, 10); function cambiarColor() { myColorTransform = {ra:100, rb:indiceColor, ga:100, gb:indiceColor, ba:100, bb:indiceColor, aa:100, ab:0}; myColor.setTransform(myColorTransform); indiceColor -= 2; if (indiceColor == -1) { clearInterval(intervaloColor); } } }; } // con esta función desplazo el lienzo de las miniaturas para // pasar de página function moverLienzo(posY:Number):Void { var myTween:Tween = new Tween(lienzo_miniaturas, "_y", mx.transitions.easing.Regular.easeOut, lienzo_miniaturas._y, posY, 1, true); } // deshabilito de inicio el botón de volver atrás // ya se muestra la página 1 pMenos_btn.enabled = false; pMenos_btn._alpha = 30;
Y lo que yo hacia en el resto de botones para que desaparezca la galeria era:
unloadMovie(lienzo_miniaturas);
Por favor ayudenme porque no se que hacer.
Gracias