2011-01-31 13 views
5

Tengo solo un elemento <img> en mi página. Cambio el atributo src de esta imagen cada 7 segundos.¿Cómo agregar un efecto de transición de imagen o desvanecimiento usando JQuery?

Veo las imágenes nuevas cada 7 segundos, pero sería mejor si puedo agregar algún efecto de transición o desvanecimiento al cargar una nueva imagen.

¿Algunas tienen una secuencia de comandos simple para esto?

No necesito ningún complemento. Solo necesito alguna pista o algunas líneas de muestra para hacerlo.

Respuesta

9

A pesar de lo mencionado Kaiqing, se puede utilizar la capacidad de las devoluciones de llamada jQuery para fade in/out de la imagen mientras se está cambiando la misma. Esto se puede hacer de esta manera: http://www.jsfiddle.net/bradchristie/HsKpq/1/

$('img').fadeOut('slow',function(){ 
    $(this).attr('src','/path/to/new_image.png').fadeIn('slow'); 
}); 
+0

Probándolo. Este código parece realmente pequeño. Si funciona, lo aceptaré. – kheya

+1

Lo probé. Hace el desvanecimiento, pero el desvanecimiento es poco largo. Veo que toda el área se vuelve blanquecina por un breve momento (fracción de segundo). Luego carga nueva imagen. Parece un poco feo. He visto a otras personas hacerlo bien donde la transición de la imagen ocurre muy rápidamente. – kheya

+0

Intenté "rápido" también. No mucha diferencia. – kheya

0

No puede hacer esto con solo una imagen.

mira esto:

<div id="main_over"></div> 
    <div id="main_img"></div> 
    <div id="himg" style="display:none; clear:both; margin-top:40px;"> 

      <img id="si_15" src="http://website.com/media/uploaded/home_slideshow/53/dummy_image_large_1__large.jpg" alt="dummy_image_large_1" /> 

      <img id="si_16" src="http://website.com/media/uploaded/home_slideshow/53/dummy_image_large_2__large.jpg" alt="dummy_image_large_2" /> 

      <img id="si_17" src="http://website.com/media/uploaded/home_slideshow/53/dummy_image_large_3__large.jpg" alt="dummy_image_large_3" /> 

      <img id="si_18" src="http://website.com/media/uploaded/home_slideshow/53/dummy_image_large_4__large.jpg" alt="dummy_image_large_4" /> 

    </div> 
<style> 
#main_over{position:absolute; z-index:10; width:800px; height:600px; background:#fff; display:block;} 
</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    var i = 0; 
    $('#himg img').each(function(){ 
     if(i == 0) 
     { 
      $('#main_over').html('<img src="' + $(this).attr('src') + '" alt="" />'); 

     } 
     if(i == 1) 
     { 
      $('#main_img').html('<img src="' + $(this).attr('src') + '" alt="" />'); 
     } 
     i ++; 

     slide.arr.push($(this).attr('src')); 
    }); 

    setTimeout(function(){ 
     if(slide.arr.length < 2) 
      slide.fade(0); 
     else 
      slide.fade(2); 
    }, 3000); 
}); 

var slide = { 
    arr: Array(), 
    fade: function(i) 
    { 
     $('#main_over').fadeOut("medium"); 
     setTimeout(function(){slide.next(i);}, 1000); 
    }, 
    next: function(i) 
    { 
     $('#main_over').html($('#main_img').html()); 
     $('#main_over').css('display', 'block'); 

     $('#main_img').html('<img src="' + slide.arr[i] + '" alt="" />'); 

     i++; 
     if(i >= slide.arr.length) 
      i = 0; 

     setTimeout(function(){slide.fade(i);}, 3000); 
    } 
} 

</script> 
+0

[¿Quién dice?] (Http://www.jsfiddle.net/bradchristie/HsKpq/) –

+0

Eso se desvanece por completo. Pensé que estaba pidiendo fx de transición - fundidos cruzados o algo así. –

+1

Todo lo que pedí fue: cuando se carga una nueva imagen, quiero ocultar la imagen anterior con un efecto de desvanecimiento y cargar la nueva imagen con un efecto de desvanecimiento. De esa forma el usuario no verá un cambio repentino de la imagen. Lo siento, si no fui lo suficientemente claro. – kheya

1

Usted querrá usar dos imágenes:

<img id="backImg" /> 
<img id="frontImg" /> 

Establecer #backImg estar detrás #frontImg así:

#backImg 
{ 
    position: absolute; 
} 

Luego, en su código que se dispara cada 7 segundos, fadeOut la imagen frontal ... esto automáticamente hará su efecto de fundido cruzado porque la imagen de atrás ya está cargada detrás de él. Cuando se realiza el fundido, establecer el origen de la imagen frente al src de la imagen de nuevo, mostrarlo, y pre-cargar la siguiente imagen en la imagen de nuevo:

function transitionImages(preloadImgUrl) 
{ 
    $("#frontImg").fadeOut("slow", function() 
    { 
     $("#frontImg").attr("src", $("#backImg").attr("src")).show(); 
     $("#backImg").attr("src", preloadImgUrl); 
    } 
} 

Todo esto supone que sus imágenes son de tamaño idéntico. Si no, querrás ser un poco más elaborado con el CSS y envolver las imágenes en divs que se desvanecen.

+0

Solo tengo una imagen. Si nada funciona como se espera, lo veré como mi último recurso. Muchas gracias por responder. – kheya

Cuestiones relacionadas