Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/01/2014, 01:58
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Slideshow en Javascript

En lugar de tomar una por una las imágenes, tómalas por el tipo de elemento y las vas mostrando una por una, ocultando la actual y presentando la siguiente en un bucle infinito.

Código HTML:
Ver original
  1. <section id = "slider">
  2.     <img src = "imagen1.jpg" />
  3.     <img src = "imagen2.jpg" />
  4.     <img src = "imagen3.jpg" />

Código CSS:
Ver original
  1. img{
  2.     display: none;
  3. }

Código Javascript:
Ver original
  1. var contenedor = document.getElementById("slider"),
  2.     imagenes = contenedor.getElementsByTagName("img"),
  3.     contador = 0,
  4.     totalImagenes = imagenes.length;
  5.  
  6. imagenes[contador].style.display = "block";
  7.  
  8. var slider = {
  9.     show: function(){
  10.         imagenes[contador].style.display = "none";    
  11.         contador = (contador == totalImagenes - 1) ? 0 : ++contador;    
  12.         imagenes[contador].style.display = "block";
  13.     }
  14. };
  15.  
  16. setInterval(slider.show, 3000);

En el documento HTML, tengo una sección con tres imágenes (pueden haber muchas más o incluso menos), las cuales son ocultadas desde la hoja de estilos. En el documento JavaScript, tomo el contenedor de las imágenes y en él, busco a todos los elementos de imagen, además de declarar un contador que empezará con el valor cero y tomo la cantidad total de imágenes que conformarán mi slider.

Procedo a mostrar la primera imagen del array imagenes y luego, declaro al objeto slider, el cual tendrá como único método a show. En él, oculto la imagen que actualmente se está viendo y luego evalúo el valor actual del contador, si es igual a la cantidad de imágenes menos uno, es decir, si se está mostrando la última de las imágenes, le doy cero como valor, caso contrario, lo incremento en uno. Esto es para crear un bucle infinito, en el que mostraré las imágenes una a una y cuando muestre la última, regreso al inicio, mostrando nuevamente la primera. Finalmente, muestro la siguiente imagen, sea ésta la primera o la que siga en el array de imágenes.

Cuando acceda a la página, se ejecutará el método show del objeto slider, cuya ejecución controlaré con el método setInterval, el cual ejecutará el mencionado método cada 3 segundos o 3000 milisegundos.

Aquí puedes ver este ejemplo en ejecución.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 07/01/2014 a las 02:04