Comunidad de diseño web y desarrollo en internet online

Loop en Galeria XML

Citar            
MensajeEscrito el 23 Jun 2011 10:01 am
Hola amigos, estoy haciendo una galería en flash con AS2 y XML.
Podéis visualizarla en esta web:
http://www.rinconaudiovisual.com
Dentro del apartado PORTAFOLIO

Mi pregunta es la siguiente; cuando la imagen llega a su fin, el botón sigue funcionando de la misma manera, por lo que el usuario se queda pulsándolo esperando a que aparezca una nueva imagen.
Por lo tanto, tengo dos opciones; o bien hago que cuando cargue la última imagen el botón se bloquee, o bien que vuelva a empezar por la primera imagen. Me gusta más esta última opción. Asi que, ¿cómo podría hacer que al hacer click en el botón de siguiente, se vuelva a cargar todo desde el principio?


Este es el código que he usado:

Para el AS2:

Código ActionScript :

//Permite caracteres tradicionales como letras con tilde la ñ, etc.
System.useCodepage = true; 

//Se declara la variable indice de tipo número (utilizada para referencia la foto a mostrar)
var indice:Number; 

//Se declara la variable dibujo_xml de tipo XML (utilizada para almacenar el documento xml)
var texto_xml:XML; 

/*
Funcion cargarDatos (utilizada para cargar y cambiar las fotos en el documento)
Esta función recibe un parámetro "_indice" que corresponde al elemento foto  a mostrar
*/
function cargarDatos(_indice:Number){
      //Se inicializan variables utilizadas para almenar los datos de una foto
      var titulo:String;
      var mensaje:String;
      var imagen:String;
      
      //Recuperando datos del objeto xml
      
      //Se accede al primer hijo de elemento [foto] y se recupera al valor del primer elemento de [titulo]
      titulo = texto_xml.firstChild.childNodes[_indice].firstChild.firstChild.nodeValue;
      
      //Se accede al segundo hijo de elemento [foto] y se recupera el valor del primer elemento de [mensaje]
      mensaje = texto_xml.firstChild.childNodes[_indice].firstChild.nextSibling.firstChild.nodeValue
      
      //Se accede al último hijo de elemento [foto] y se recupera el valor del primer elemento de [imagen]
      imagen = texto_xml.firstChild.childNodes[_indice].lastChild.firstChild.nodeValue
      
      //Mostrando los datos recuperados en el cuado de texto mensaje_txt y cargando la imagen en pantalla_mc
      _root.titulo_txt.htmlText = "";
      _root.mensaje_txt.htmlText = "";
      _root.titulo_txt.htmlText += "<p><font color='#666666' size='14'><pre><b><i>" + titulo + "</i></b></pre></font></p>";
      _root.mensaje_txt.htmlText += "<p><font size='14'>" + mensaje + "</font>";
      //Cargado la imagen JPG externa en el clip pantalla_mc con el valor recuperado del objeto xml
      _root.contenedor2_mc.loadMovie(imagen);   
   }

//Función que permite avanzar a la [foto] siguiente almacenada en el objeto xml
siguiente_btn.onPress = function(){   
   //comprobando si existe el siguiente elemento [foto]
   if(texto_xml.firstChild.childNodes[indice+1] != null){//retringue  a avanzar solo si hay una [foto] siguiente
         indice++; //incrementado en uno el indice
         cargarDatos(indice); //recuprando y mostrando los datos y la imagen en la pantalla
         }
   }

//Función que permite retroceder a la foto anterior almacenada en el objeto xml   
anterior_btn.onPress = function(){
   //comprobando si existe una elemento [foto] anterior
   if(texto_xml.firstChild.childNodes[indice-1] != null){//retringue  a avanzar solo si hay una [foto] anterior
         indice--; //reducciendo en uno el indice
         cargarDatos(indice); //recuprando y mostrando los datos y la imagen en la pantalla
         }
   }   
   
//Inicializaciones
indice=0; //inicializando indice en 0 para mostrar la primera foto

//creando el objeto fotos_xml de typo XML
texto_xml = new XML();

//Permite que el objeto XML ignore los espacios en blanco entre marca y marca del documento XML
texto_xml.ignoreWhite = true;

//El método load() permite cargar el documento xml "dibujo_xml"
texto_xml.load("paisajes.xml");

//El evento onLoad de activa cuado se haya cargado el documento fotos.xml
texto_xml.onLoad = function(){
         //Se llama a la funcion cragarDatos para mostar la primera foto (esto por la variable indice en 0)
         cargarDatos(indice);         
   }


Para el XML:

Código XML :

<?xml version="1.0" encoding="iso-8859-1"?>
<foto>

   <foto fecha="14/04/2011"> 
      <titulo>"Loneliness"</titulo>
      <mensaje>Puerto de Catarroja</mensaje>      
      <image>imagenes/paisaje001.jpg</image>
   </foto>

   <foto fecha="14/04/2011"> 
      <titulo>"Ciudad de las Artes y las Ciencias"</titulo>
      <mensaje>Valencia</mensaje>      
      <image>imagenes/paisaje002.jpg</image>
   </foto>
   
   
</foto>


Espero no haber sido demasiado lioso con mi explicación.

Muchisimas gracias a todos por vuestro tiempo.

Saludos!

Por Batikao

19 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jun 2011 06:38 pm
En el onPress de siguiente_btn agrega

Código ActionScript :

siguiente_btn.onPress = function(){    
   //comprobando si existe el siguiente elemento [foto] 
   if(texto_xml.firstChild.childNodes[indice+1] != null){//retringue  a avanzar solo si hay una [foto] siguiente 
         indice++; //incrementado en uno el indice 
         cargarDatos(indice); //recuprando y mostrando los datos y la imagen en la pantalla 
         }  else {
             indice = 0;
              cargarDatos(indice)
         }
   } 
 


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Jun 2011 08:21 am
Vaya.. Es tan simple como ingenioso.. :D . Muchísimas gracias Jorge!!!

Sólo una cosita más, para acceder a la primera imagen del archivo XML, lo conseguimos con la siguiente igualdad

Código ActionScript :

indice = 0;

Pero si quisiera llegar a la última (independientemente de lo que se cambie el xml), ¿cómo podría hacerlo?
Dicho de otro modo, ¿qué tendría que poner en el anterior_btn de la primera imagen (cuando indice<=0) para que al pulsarlo me mostrara la última imagen?

Muchas gracias!!

Por Batikao

19 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Jun 2011 11:44 am
Estás accediendo directamente al XML para pillar las fotos:

texto_xml.firstChild.childNodes[indice+1]

En realidad deberías copiarlas a un Array, de donde puedes sacar la cantidad con la propiedad length.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Jun 2011 12:40 pm
Nuevamente te doy las gracias :) , la verdad es que aún no se muy bien como funcionan los arrays, asi que me pondré a mirar tutoriales a saco.

De momento y gracias a tu ayuda he logrado hacer un apaño, y es que el botón de retroceder desaparezca cuando el indice es igual o menor a 0. Por lo tanto mi problema está más que solucionado.

Te agradezco mucho los consejos y tu tiempo.


Un abrazo!

Por Batikao

19 de clabLevel



 

firefox

 

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