等待图像替换,直到加载图像

时间:2011-04-26 10:50:41

标签: jquery image loading

我有一个工作脚本(感谢stackexchange!),可以动态交换图像。我将它用作图库脚本。它看起来像这样:

           $(".source a").click(function(e){
                e.preventDefault();
                var $a = $(this);
                $("#targetcontainer img").hide("puff", function(){
                    $(this).attr("src", $a.attr("href")).show("fold");
                });
            });

有关此脚本的问题是旧图像在JQ show命令后闪烁。新的源图像显示了大约一个左右,这产生了一个奇怪的效果。我怎样才能防止这种情况发生?

3 个答案:

答案 0 :(得分:10)

您可以在尝试显示图片之前预先加载图片......

$(".source a").click(function(e) {
    e.preventDefault();

    var newSrc = this.href,
        image = new Image();    

    image.onload = function() {
        $("#targetcontainer img").hide("puff", function() {
            $(this).attr("src", newSrc).show("fold");
        });
    }
    image.src = newSrc;
});

答案 1 :(得分:9)

在JQuery中有加载事件。

1)检索图像。

var image = $("#img");
image.hide();

2)在加载时做点什么。

image.load(function(){
 image.show();
});

3)在图像发生变化后,将src属性更改为fire load event。

image.attr("src","image.jpg");

您可以在此处详细了解:http://api.jquery.com/load-event/

答案 2 :(得分:0)

在所有浏览器中以最小延迟实现此功能的最佳方法是使用CSS sprites

如果这不是您的选择,您可以将图像预加载到某处并使其不可见 - 浏览器会提前加载图像,并且在JQuery执行时不会延迟。