Foros del Web » Programando para Internet » Jquery »

cambiar fondo con jquery cada x segundos

Estas en el tema de cambiar fondo con jquery cada x segundos en el foro de Jquery en Foros del Web. Hola gente, estuve buscando y no puedo encontrar ninguna funcion programada que se adapte a lo que quiero. Necesito cambiar la imagen de fondo de ...
  #1 (permalink)  
Antiguo 15/05/2012, 17:19
Avatar de edu007ar  
Fecha de Ingreso: septiembre-2003
Ubicación: Buenos Aires
Mensajes: 118
Antigüedad: 20 años, 6 meses
Puntos: 0
cambiar fondo con jquery cada x segundos

Hola gente, estuve buscando y no puedo encontrar ninguna funcion programada que se adapte a lo que quiero.

Necesito cambiar la imagen de fondo de la web (body) cada cierta cantidad de segundos o minutos, entre un listado de imagenes.

Pense en una funcion jquery que se active sola cuando la pagina carga, nada manual.

No se si alguien podrá ayudarme con esto.

Gracias!
__________________
www.proavanz.com.ar
  #2 (permalink)  
Antiguo 15/05/2012, 23:25
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: cambiar fondo con jquery cada x segundos

Hola:

¿Porqué jquery y no javascript normal...?

window.onload = function() {
setInterval(cambiarFondo, 5000);// 5 segundos
}
fondoActual = 0;
imagenes = ["fondo1.jpg", "fondo2.jpg", "fondo3.jpg"];
function cambiarFondo() {
document.body.style.backgroundImage = "url(" + imagenes[++fondoActual % imagenes.length] + ")";
}

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Última edición por caricatos; 16/05/2012 a las 00:36 Razón: Faltaba un detallito
  #3 (permalink)  
Antiguo 16/05/2012, 00:54
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: cambiar fondo con jquery cada x segundos

Acá te dejo una variante, similar a la de @caricatos, pero con un agregado, para evitar parpadeos durante el cambio de fondo, vamos a precargar la imagen que sigue en la secuencia, para almacenarla en cache y que ya esté disponible cuando se la necesite

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>Cambiar background cada n segundos</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <style type="text/css">
  7. /*<![CDATA[*/
  8. /* definimos como background por defecto la primera imagen de nuestra lista */
  9. body {
  10. background-image: url('sfondo01.jpg');
  11. }
  12. /* esta div no es visible, pero precarga la imagen siguiente a cargar por body, asi se evita algún posible parpadeo
  13. definimos como background por defecto la 2ª imagen de nuestra lista.
  14. Para la demo le damos un alto y ancho, pero debe establecerse a 0;
  15. */
  16. div#precarga{
  17. width: 100px;
  18. height: 100px;
  19. margin: 0px;
  20. padding: 0px;
  21. background-image: url('sfondo02.gif');
  22. }
  23. h1{
  24. color: #0061C1;
  25. }
  26. /*]]>*/
  27. <script type="text/javascript">
  28. //<![CDATA[
  29. // aqui definis la lista de imágenes para el cambio automático
  30. var fondos = ['sfondo01.jpg', 'sfondo02.gif', 'sfondo03.jpg', 'sfondo04.jpg', 'sfondo05.jpg', 'sfondo06.jpg', 'sfondo07.jpg'];
  31. var fondo_actual = 0;
  32. // aqui hacemos la rotación
  33. var CambiarFondo = function(){
  34. if (fondo_actual == fondos.length) {
  35. fondo_actual = 0;
  36. }
  37. var precargar =fondo_actual++;
  38. var precargar2 = precargar+2;
  39. // cambiamos el background del body
  40. document.body.style.backgroundImage = 'url('+ fondos[precargar]+ ')';
  41. // cargamos en el div no visible "#precarga" la imagen siguiente que se cargará en el body
  42. // para ya tenerla en la cache, comenzamos con la imagen 3, ya que la 1 y 2 las tenemos en el css
  43. document.getElementById('precarga').style.backgroundImage =  'url('+fondos[precargar2]+ ')';
  44. }
  45. //aqui definís el tiempo en milisegundos e  inicias la función con setInterval para que se repita indefinidamente
  46. window.setInterval(CambiarFondo, 10000);
  47. //]]>
  48. </head>
  49. <div id="precarga"><!-- precarga de backgrounds --></div>
  50. <h1>Cambiar background cada n segundos</h1>
  51. </body>
  52. </html>

Demo
http://foros.emprear.com/javascript/...orotarbg2.html

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #4 (permalink)  
Antiguo 16/05/2012, 18:08
Avatar de edu007ar  
Fecha de Ingreso: septiembre-2003
Ubicación: Buenos Aires
Mensajes: 118
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: cambiar fondo con jquery cada x segundos

Gracias por ambas respuestas!! en realidad pensé primero en jquery porque pretendia que el cambio de imagen sea con un fadein o cualquier efecto menos violento que un cambio directo (olvide comentarlo en el primer post).

Si se les ocurre como agregar algun efecto a estas funciones estare de mas agradecido. Igual algo de aqui voy a aprovechar.

Gracias!
__________________
www.proavanz.com.ar
  #5 (permalink)  
Antiguo 16/05/2012, 18:46
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: cambiar fondo con jquery cada x segundos

Hola:

En principio el efecto fade no es más que un cambio de la opacidad del elemento al que se le aplique... y si se aplica al body de la página, se mostrará la página entera con el efecto... para conseguir el efecto (no importa si se usan librerías o no) habría que poner una capa encima del body con los estilos adecuados para poder aplicar el efecto... dudo de que las librerías te ayuden, pero moveremos el tema para ver si te pueden ayudar...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 16/05/2012, 21:44
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: cambiar fondo con jquery cada x segundos

Podrías hacer algo así:

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <meta charset="utf-8" />
  3. <title>Cambio de fondo</title>
  4. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  5. <script src="fondo_imagenes.js" type="text/javascript"></script>
  6. <link rel="stylesheet" href="estilos.css" />
  7.  
  8. </head>
  9.     <div id="fondo-imagenes">
  10.         <img src="http://placekitten.com/1200/800" />
  11.         <img src="http://placebear.com/1200/800" />
  12.         <img src="http://placedog.com/1200/800" />
  13.     </div>
  14.     <div id="wrap-contenido">
  15.         <!-- contenido de ejemplo -->
  16.         <h1>Mi p&aacute;gina</h1>
  17.         <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  18.         <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  19.         <p>Lorem ipsum dolor sit amet, ephesiorum quod non dum veniens indica enim materiam ad quia. Testare in modo invenit iuvenem patre nihil labore in lucem concitaverunt in. Famulus prope sola habiturus in modo invenit. Neminem habere matrem vel regio hinc Agimus nolo accipies, nescimus de me missam canticis in rei finibus veteres hoc. Africus hortamento laetus moritur ad nomine Stranguillio in, x domum sum ad te sed quod eam est cum!</p>
  20.         <!-- contenido de ejemplo -->
  21.     </div>
  22. </body>
  23. </html>

Código CSS:
Ver original
  1. body, html{
  2.     /* pequeño reset, ignorar */
  3.     margin:0;
  4.     padding:0;
  5. }
  6.  
  7. /* Posicionamiento de los elementos */
  8. #fondo-imagenes, #fondo-imagenes img{
  9.     position: absolute;
  10.     left:0;
  11.     top: 0;
  12.     width: 100%;
  13.     z-index: 1; /* posicionar debajo del contenido */
  14. }
  15.  
  16. /* posicionamiento del contenido */
  17. #wrap-contenido{
  18.     /* IMPORTANTE, posicionar encima de las imagenes */
  19.         position: relative;
  20.         z-index: 10;
  21.        
  22.     /* Ignorar, estilos de ejemplo */
  23.     width: 960px;
  24.     margin: 0 auto;
  25.     padding: 30px 20px;
  26.     background: rgba(0,0,0,0.6);
  27.     color: #eee;
  28.     border: 8px solid rgba(255,255,255,0.2);
  29.     border-top: 0;
  30.     -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.3);
  31.     -moz-box-shadow: 0 0 10px rgba(0,0,0,0.3);
  32.     box-shadow: 0 0 10px rgba(0,0,0,0.3);
  33. }

Código Javascript:
Ver original
  1. $(window).load(function(){
  2.     // Lista de imagenes
  3.     var $_imagenes = $('#fondo-imagenes img');
  4.     var i_cantidad_img = $_imagenes.length;
  5.     var i_iniciar_en = 0;           //Indice de imagen en cual iniciar
  6.     var i_tiempo = 4000;            //Intervalo de tiempo
  7.     var i_duracion = 700;           //Duración de la animación
  8.     var s_animacion = 'fadeToggle'; //Animacion a usar
  9.     var s_claseactiva = 'img_activa' //Clase de la imagen activa
  10.    
  11.     // Oculto todas las imagenes inicialmente
  12.     $_imagenes.hide();
  13.    
  14.     // Muestro la primer imagen
  15.     $_imagenes.eq(i_iniciar_en)[s_animacion](i_duracion).addClass(s_claseactiva);
  16.    
  17.     // Muestro la primera
  18.     setInterval(function(){
  19.         i_iniciar_en = i_iniciar_en+1>=i_cantidad_img?0:i_iniciar_en+1;     //Incremento indice de imagen activa
  20.         $('.' + s_claseactiva)[s_animacion](i_duracion).removeClass(s_claseactiva); //Oculto imagen actualmente activa
  21.         $_imagenes.eq(i_iniciar_en)[s_animacion](i_duracion).addClass(s_claseactiva);   //Muestro siguiente imagen
  22.     },i_tiempo);
  23. });


Demo funcionando: http://jsbin.com/efosaw


Tené en cuenta que es sólo un demo que hice en unos minutos. Hay algunas cosas a considerar:
  • Las imagenes deberian tener un min-width igual al contenedor gneral, cosa que no se achiquen mucho al redimensionar la ventana debajo del ancho del contenedor del contenido.
  • Hay que solucionar mediante CSS el hecho que la imagen de fondo te estira la pantalla, siendo que no hay más contenido debajo. Esto se puede, hay que buscar y probar, no tengo ganas.
  • El HTML no es muy semántico, pues esas imágenes son puramente decorativas y no tienen nada que hacer ahí. Sería menos incorrecto insertar el contenedor de las imágenes con el mismo script, para que no esten en el HTML.
  • etc.

- Edit-

Por algún motivo el demo de JSBin se clava en la segunda imagen. No tira error ni nada... En fin, acá funciona bien:
http://dl.dropbox.com/u/48567662/sit...out/index.html
__________________
nahueljose.com.ar

Última edición por Naahuel; 16/05/2012 a las 21:52
  #7 (permalink)  
Antiguo 19/05/2012, 16:09
Avatar de edu007ar  
Fecha de Ingreso: septiembre-2003
Ubicación: Buenos Aires
Mensajes: 118
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: cambiar fondo con jquery cada x segundos

Naahuel! muy bueno el codigo , seguramente lo voy a usar con algunas modificaciones.

Gracias!!
__________________
www.proavanz.com.ar
  #8 (permalink)  
Antiguo 09/08/2012, 15:42
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 1 mes
Puntos: 8
Respuesta: cambiar fondo con jquery cada x segundos

hola!!!

este hilo es muy bueno y estaba buscando algo parecido

pero lo que no encuentro es que simplemente me tarde unos segundos en cargar el fondo de la pagina y se cargue haciendo un fade

creo que retocando el codigo conseguiré lo que me propongo


avisenme si tienen otro metodo
  #9 (permalink)  
Antiguo 09/07/2014, 12:09
 
Fecha de Ingreso: julio-2014
Mensajes: 1
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: cambiar fondo con jquery cada x segundos

Definitivamente Jquery nos facilita mucho las cosas Naahuel, gracias me sirvio bastante tu ejemplo!

Etiquetas: cada, funcion, segundos
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




La zona horaria es GMT -6. Ahora son las 05:02.