使用JQuery慢慢更改/淡化/动画图像

时间:2012-05-06 23:10:32

标签: jquery image jquery-animate fade src

这是我的img, <img src="one.png" id="one" onMouseOver="animateThis(this)">

当用户使用jQuery悬停时,我想慢慢将此图像src更改为“oneHovered.png”。哪种jQuery方法最好这样做?我看到很多例子都希望我改变CSS背景。有什么可以直接改变src属性吗?

4 个答案:

答案 0 :(得分:22)

您可以首先淡出图像,使用第一个可选参数控制淡出的持续时间。淡出完成后,将触发匿名回调,并将图像的源替换为新的。然后,我们使用另一个持续时间值淡入图像,以毫秒为单位测量:

原始HTML:

<img src="one.png" id="one" />

JavaScript的:

$('#one').hover(function() {

    // increase the 500 to larger values to lengthen the duration of the fadeout 
       // and/or fadein
    $('#one').fadeOut(500, function() {
        $('#one').attr("src","/newImage.png");
        $('#one').fadeIn(500);
    });

});

最后,使用jQuery,动态绑定JavaScript事件要轻松得多,而不使用HTML本身的任何JavaScript属性。我修改了原始的img代码,使其只有srcid属性。

jQuery hover事件将确保当用户使用鼠标悬停在图像上时该函数将触发。

如需更多阅读,请参阅jQuery fadeOutjQuery fadeIn

图像加载时间可能出现问题:

如果这是用户第一次悬停在图像上并请求它,实际的fadeIn可能会出现轻微的故障,因为服务器在请求newImage.png时会有延迟。解决方法是预加载此图像。 StackOverflow on preloading images上有几个资源。

答案 1 :(得分:2)

试试这个

<img class="product-images-cover" src="~/data/images/productcover.jpg" />
<div class="list-images-product">
 <div>
   <img class="thumbnail" src="~/data/images/product1.jpg" />
 </div>
 <div>
   <img class="thumbnail" src="~/data/images/product2.jpg" />
 </div>
</div>

$(document).ready(function () {
    $(".list-images-product .thumbnail").click(function (e) {
        e.preventDefault();
        $(".product-images-cover").fadeOut(250).attr("src", $(this).attr('src')).fadeIn(250);
    });
});

答案 2 :(得分:1)

除了@ jmort253之外,如果在淡出之前添加min-height会更好。否则,您可能会看到特别是响应式图像的抖动。

我的建议是

$('#one').hover(function() {
    // add this line to set a minimum height to avoid jerking
    $('#one').css('min-height', $('#one').height());
    // increase the 500 to larger values to lengthen the duration of the fadeout 
       // and/or fadein
    $('#one').fadeOut(500, function() {
        $('#one').attr("src","/newImage.png");
        $('#one').fadeIn(500);
    });

});

答案 3 :(得分:0)

通过jquery更改图像源时,需要加载时间,这会导致一些闪烁效果。我修改了上面的代码来解决这个问题。

$(".list-images-product .thumbnail").fadeTo(1000,0.30, function() {
  $(".list-images-product .thumbnail").attr("src",newsrc);
  $(".list-images-product .thumbnail").on('load', function(){
    $(".list-images-product .thumbnail").fadeTo(500,1);
  });
 });