Foros del Web » Programando para Internet » Javascript »

Slideshow en Javascript

Estas en el tema de Slideshow en Javascript en el foro de Javascript en Foros del Web. ¡Hola comunidad de Foros del Web! ¿Alguna sugerencia para crear 3 slideshows de 3 fotos diferentes ( foto_casa_01.jpg , foto_coche_01.jpg, foto_perro_01.jpg) cada una con con ...
  #1 (permalink)  
Antiguo 06/01/2014, 23:29
 
Fecha de Ingreso: junio-2010
Mensajes: 41
Antigüedad: 14 años, 5 meses
Puntos: 0
Pregunta Slideshow en Javascript

¡Hola comunidad de Foros del Web! ¿Alguna sugerencia para crear 3 slideshows de 3 fotos diferentes (foto_casa_01.jpg, foto_coche_01.jpg, foto_perro_01.jpg) cada una con con 4 transiciones?

Este es el código para 1 solo slideshow (foto_casa_01.jpg) pero no para los 3:

<head>
<script type="text/javascript">
var image1 = new Image()
image1.src = "images/foto_casa_01.jpg"
var image2 = new Image()
image2.src = "images/foto_casa_02.jpg"
var image3 = new Image()
image3.src = "images/foto_casa_03.jpg"
var image4 = new Image()
image4.src = "images/foto_casa_04.jpg"

</script>
</head>

<body>
<p><img src="images/foto_casa_01.jpg" width="500" height="300" name="slide" /></p>
<script type="text/javascript">
var step=1;
function slideit()
{
document.images.slide.src = eval("image"+step+".src");
if(step<4)
step++;
else
step=1;
setTimeout("slideit()",2500);
}
slideit();
</script>
</body>

¿Cómo añadir el código para los slideshows de foto_coche_01.jpg y foto_perro_01.jpg (uno debajo del otro en la misma pagina.html)?

Muchas gracias!

Última edición por caricatos; 24/02/2014 a las 19:15 Razón: borrando estilos inútiles
  #2 (permalink)  
Antiguo 07/01/2014, 01:58
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
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
  #3 (permalink)  
Antiguo 07/01/2014, 15:23
 
Fecha de Ingreso: junio-2010
Mensajes: 41
Antigüedad: 14 años, 5 meses
Puntos: 0
Pregunta Respuesta: Slideshow en Javascript

Gracias por responder Alexis. Este código es sólo para un slideshow ¿cierto? imagen1.jpg, imagen2.jpg, etc.

1. ¿Cómo incluir otro slideshow dentro del código (misma página html) por ejem: foto1.jpg, foto2.jpg, etc?

La idea es tener varios slideshow en la misma página cada uno con sus imágenes propias.

2. ¿El CSS va dentro de {head}?
  #4 (permalink)  
Antiguo 07/01/2014, 18:43
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Slideshow en Javascript

Cita:
Iniciado por creacion_grafica Ver Mensaje
Este código es sólo para un slideshow ¿cierto?
Si te fijas bien, el slider afecta a las imágenes del contenedor especificado, por lo que solamente tendría que hacer un ligero cambio en el código para que afecte a varios contenedores al mismo tiempo.

Cita:
Iniciado por creacion_grafica Ver Mensaje
¿Cómo incluir otro slideshow dentro del código (misma página html) por ejem: foto1.jpg, foto2.jpg, etc?
Reacomodando el código, quedaría así:

Código HTML:
Ver original
  1. <section class = "slider">
  2.     <img src = "imagen1.jpg" />
  3.     <img src = "imagen2.jpg" />
  4.     <img src = "imagen3.jpg" />
  5.  
  6. <section class = "slider">
  7.     <img src = "imagen4.jpg" />
  8.     <img src = "imagen5.jpg" />
  9.     <img src = "imagen6.jpg" />

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

Código Javascript:
Ver original
  1. var contenedores = document.getElementsByClassName("slider")
  2.     totalContenedores = contenedores.length;
  3.  
  4. for (i = 0; i < totalContenedores; i++) {
  5.   (function(indice){  
  6.     var imagenes = contenedores[indice].getElementsByTagName("img"),
  7.         contador = 0,
  8.         totalImagenes = imagenes.length;
  9.  
  10.     imagenes[contador].style.display = "block";
  11.  
  12.     var slider = {
  13.       show: function(){
  14.         imagenes[contador].style.display = "none";    
  15.         contador = (contador == totalImagenes- 1) ? 0 : ++contador;
  16.         imagenes[contador].style.display = "block";
  17.       }
  18.     };
  19.     setInterval(slider.show, 3000);
  20.   })(i);  
  21. }
Como puedes notar, ahora tengo dos slider (y puedo tener muchos más si quiero), los cuales tienen la misma clase de nombre "slider", cuyas imágenes son ocultadas desde la hoja de estilos. En el código JS, tomo los elementos que tengan por clase el nombre "slider" y tomo la cantidad total de ellos (en número, que en este caso es dos pues hay dos contenedores con la clase "slider").

Con ayuda de un bucle, aplico el efecto deseado en cada imagen que se encuentre en cada contenedor, para lo cual, utilizo una función anónima auto-ejecutable, para así iniciar con el efecto del slider de forma automática y aplicar correctamente los efectos a cada imagen de cada contenedor. El resto el código sigue la misma lógica del que te mostré en la anterior respuesta, con la diferencia de que ahora trabajo con un array de contenedores, por lo que utilizo un sub-índice para acceder a ellos.

Cita:
Iniciado por creacion_grafica Ver Mensaje
¿El CSS va dentro de {head}?
Claro, puedes escribirlo directamente:

Código HTML:
Ver original
  1. <style type = "text/css">
  2. /*
  3.     Aquí van los estilos
  4. */

O incluirlo de forma externa:
Código HTML:
Ver original
  1. <link rel = "stylesheet" type = "text/css" href = "estilos.css" />
En donde estilos.css, es un archivo en formato CSS que contiene los estilos.

Aquí lo tienes, 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
  #5 (permalink)  
Antiguo 08/01/2014, 21:30
 
Fecha de Ingreso: junio-2010
Mensajes: 41
Antigüedad: 14 años, 5 meses
Puntos: 0
Pregunta Respuesta: Slideshow en Javascript

¡Funcionó muy bien! Gracias de nuevo Alexis.

Una última pregunta.. Ahora tengo 3 slideshows difts en misma página html. ¿Hay algún código para que los sliders 2 y 3 (fotos_mid_01.jpg, fotos_down_01.jpg) se retrasen 1000 y 2000 respectivamente al iniciar para que no cambien los 3 sliders al mismo tiempo en el 3000? ¡Yo sé que son una misma clase de slider ahora!


Ví en un foro estos ejemplos pero no tengo idea cómo incorporarlos al código:

setTimeout(function() { your_func(); }, 5000);
Y este otro:

setTimeout(your_func, 5000);


Mi código está así:

<section class = "slider">
<img src="imgs/fotos_up_01.jpg" width="243" height="184" border="0" align="top" />
<img src="imgs/fotos_up_02.jpg" width="243" height="184" border="0" align="top" />
<img src="imgs/fotos_up_03.jpg" width="243" height="184" border="0" align="top" />
</section>

<section class = "slider">
<img src="imgs/fotos_mid_01.jpg" width="243" height="184" border="0" align="top" />
<img src="imgs/fotos_mid_02.jpg" width="243" height="184" border="0" align="top" />
<img src="imgs/fotos_mid_03.jpg" width="243" height="184" border="0" align="top" />
</section>

<section class = "slider">
<img src="imgs/fotos_down_01.jpg" width="243" height="184" border="0" align="top" />
<img src="imgs/fotos_down_02.jpg" width="243" height="184" border="0" align="top" />
<img src="imgs/fotos_down_03.jpg" width="243" height="184" border="0" align="top" />
</section>

<script type="text/javascript">
var contenedores = document.getElementsByClassName("slider")
totalContenedores = contenedores.length;

for (i = 0; i < totalContenedores; i++) {
(function(indice){
var imagenes = contenedores[indice].getElementsByTagName("img"),
contador = 0,
totalImagenes = imagenes.length;

imagenes[contador].style.display = "block";

var slider = {
show: function(){
imagenes[contador].style.display = "none";
contador = (contador == totalImagenes- 1) ? 0 : ++contador;
imagenes[contador].style.display = "block";
}
};
setInterval(slider.show, 3000);
})(i);
}
</script>

Saludos
  #6 (permalink)  
Antiguo 08/01/2014, 23:23
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Slideshow en Javascript

Puedes hacer que varíe el tiempo de transición por cada slider afectando el tiempo de control en setInterval.

Código Javascript:
Ver original
  1. var contenedores = document.getElementsByClassName("slider"),
  2.     totalContenedores = contenedores.length;
  3.  
  4. for (i = 0; i < totalContenedores; i++) {
  5.   (function(indice){  
  6.     var imagenes = contenedores[indice].getElementsByTagName("img"),
  7.         contador = 0,
  8.         totalImagenes = imagenes.length;
  9.  
  10.     imagenes[contador].style.display = "block";
  11.  
  12.     var slider = {
  13.       show: function(){
  14.         imagenes[contador].style.display = "none";    
  15.         contador = (contador == totalImagenes- 1) ? 0 : ++contador;
  16.         imagenes[contador].style.display = "block";
  17.       }
  18.     };
  19.     setInterval(slider.show, 3000 * (indice + 1));
  20.   })(i);  
  21. }

Como verás, multiplico los 3000 milisegundos por el valor del índice (número de slider con respecto a los demás) más uno, eso hará que el primero se ejecute a los 3000 milisegundos, el segundo a los 6000 y el tercero a los 9000. Puedes cambiar los 3000 milisegundos por otra cifra para que la transición de los últimos sliders no demore tanto.

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
  #7 (permalink)  
Antiguo 09/01/2014, 12:41
 
Fecha de Ingreso: junio-2010
Mensajes: 41
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Slideshow en Javascript

Hice pruebas y estamos cerca pero: setInterval(slider.show, 3000 * (indice + 1)); hace que el primer slide aparezca más veces que el último. Por ejem 9 veces mientras el tercer slide 3 veces al verse influenciados por el indice exponencialmente.

La idea sería que los intervalos de los sliders duren lo mismo (3000) pero que el segundo slider empiece a correr en el 4000 y el tercer slider en el 5000.

Talvez la solución sea el: setTimeout(slider.show, 1000); Pero ¿cólo aplicarlo a cada slide? Ayudaa.

Gracias Alexis.
  #8 (permalink)  
Antiguo 09/01/2014, 15:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Slideshow en Javascript

Una solución rápida sería hacer un bloque de código para cada slider, pero como esa no es la idea, se me ocurre que puedas hacer el control así:

Código Javascript:
Ver original
  1. setInterval(slider.show, 700 + ((indice + 1)/2 * 1000));

Obviamente, no es exactamente lo que pides, pero al menos le agrega dinamismo a las transiciones de cada slider sin que haya tanta diferencia de tiempo entre ellas.

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
  #9 (permalink)  
Antiguo 10/01/2014, 16:57
 
Fecha de Ingreso: junio-2010
Mensajes: 41
Antigüedad: 14 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Slideshow en Javascript

Tengo que hacer mátemáticas para analizar qué pasa como resultado.. ¡pero quedó muy bien!

¡Muchas gracias Alexis por hacer a los demás lo que quisieras que hagan por ti!
  #10 (permalink)  
Antiguo 24/02/2014, 18:08
 
Fecha de Ingreso: junio-2010
Mensajes: 41
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Slideshow en Javascript

Hola Alexis. ¿Cómo estás? Oye.. una pregunta. ¿Algún línea de código para hacer un efecto de transición entre imgs (por ejem. tipo columnas?

Saludos.
  #11 (permalink)  
Antiguo 24/02/2014, 18:42
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Slideshow en Javascript

No sé a qué te refiera con columnas, supongo que es al cambio de imágenes con un efecto de desplazamiento en barras, si es así, aquí puedes ver este plugin: http://www.tn3gallery.com/

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

Etiquetas: javascript+html, slideshow
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:34.