【问题标题】:jQuery, how to preload images and be notified when images are loaded?jQuery,如何预加载图像并在加载图像时得到通知?
【发布时间】:2012-09-28 08:11:13
【问题描述】:

我对所有 Javascript 的东西还是陌生的,我必须说实话,我还没有尝试过任何关于我的问题的东西。

我想知道是否有办法或带有jQuery的插件来预加载多个图像并在加载图像时调用一个函数?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

您可以将load 事件用于图像,但它们存在许多跨浏览器问题(这取决于您所针对的平台)。

var allImgs = $("#container img").filter(function() { return ! this.complete; });
var allImgsLength = allImgs.length;

allImgs.on("load", function() {
    if (--allImgsLength) {
        // Images have loaded.
    }
});

如果您不介意包含插件,waitForImages,(免责声明:由我编写)可以很好地处理这个问题。 :)

你会像...一样使用它

$("#container").waitForImages(function() {
    // Images have loaded.
});

如果你根本不想使用 jQuery,你可以改编第一个例子。如果您只针对现代浏览器...

var allImgs = [].filter.call(document.querySelectorAll("#container img"), 
                             function(img) {
                                return ! img.complete;
                             });
var allImgsLength = allImgs.length;

[].forEach.call(allImgs, function(img) {
    img.addEventListener(function() {
        if (--allImgsLength) {
            // Images have loaded.
        }
    });
});

如果您必须支持旧浏览器...

var allImgs = document.getElementById("container").getElementsByTagName("img");
var allImgsLength = allImgs.length;
var i;
var eventCallback = function() {
                        if (--allImgsLength) {
                             // Images have loaded.
                        }
                    };

for (i = 0; i < allImgsLength; i++) {
    if (allImgs[i].complete) {
        allImgsLength--;
    }

    if (allImgs[i].addEventListener) {
        allImgs[i].addEventListener("load", eventCallback);
    } elseif (allImgs[i].attachEvent) {
        allImgs[i].attachEvent("onload", eventCallback);
    } else {
        allImgs[i].onload = eventCallback;
    }
}

【讨论】:

  • 感谢您的回复。因此,使用您的插件,如果我理解正确,我可以创建一个不可见的 div 容器,将一些图像放入其中,当它们全部加载后,我将能够独立于 div 检索图像并将它们放置在多个不同的容器我想要的方式?图像已经加载了吗?
  • @Armz 是的,你可以这样做。严格来说,这不是插件的设计目的,但我过去成功地做到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多