确保在动态更改jquery时加载图像

时间:2010-07-22 18:00:43

标签: javascript jquery

我正在更改图像节点的图像src。 我希望能够在执行某些代码之前确保它已被更改。我该怎么做?

现在我有

function changePic(imgNode, newPic, desc){
    var descNode = $("#description");
    $(imgnode).fadeTo(500, 0, function(){
        $(imgnode).attr("src", newPic);
        $(imgnode).attr("alt", desc)
        descNode.text(desc);
        $(imgnode).fadeTo(500, 1);
    });
}

如果服务器的快速/本地服务器,则效果很好。如果服务器速度很慢,那么图像会在更改之前淡入其中...

任何想法?

编辑:我在调用changePic时加载图像。有没有更好的方法呢?

更多:为什么放最后一行不是一个好主意,

  

$(imgnode).fadeTo(500,1);

,在回调函数之外?

3 个答案:

答案 0 :(得分:2)

Preload the image,但要确保它已完全加载,请使用.load() event

引用:

  

将load事件发送给元素   当它和所有子元素一直存在时   完全装满了。这个事件可以   发送到与a关联的任何元素   网址:图片,脚本,框架,iframe,   和窗口对象。

不要错过这一行:

  

有可能是load事件   如果图像是,将不会被触发   从浏览器缓存加载。至   考虑到这种可能性,我们可以   使用触发的特殊加载事件   如果图像准备就马上。   event.special.load目前   available as a plugin

我汇总了一个我认为你希望它如何工作的例子。我在通过Google图片找到的三张图片之间切换。我在更改图像的src之前绑定了load事件以确保它被触发。 http://jsfiddle.net/xdjjR/1/

答案 1 :(得分:1)

我想,您可以在隐藏元素中预加载图像,以便加载其他html。当源更改时,应立即显示此类图像。

答案 2 :(得分:0)

使用回调参数 doc 来自doc:

$('#clickme').click(function() {
 $('#book').fadeOut('slow', function() {
    // Animation complete.
  });
});