2

可能重复:
jQuery 或 JavaScript:确定图像何时完成加载

问题是已知的,但我找不到任何简单的解决方案:

var img = new Image();

img.onLoad = function() {
  console.log("load");         // this event doesn't fire
};

img.src = "img/domino/21.png";

console.log(img.complete);     // false

setTimeout(function() {
  console.log(img.complete);   // sometimes true, sometimes false
}, 10);

我一直在寻找 onComplete 事件的实现,但我找不到任何东西。你会帮忙吗?

4

5 回答 5

7

事件处理程序属性的正确拼写是全部小写.onload,而不是.onLoad.

var img = new Image();

img.onload = function() {
  console.log("load");         // works every time
};

img.src = "img/domino/21.png";

Javascript 区分大小写,因此您必须为所有对象属性使用正确的大小写。


除此之外的替代方案.onload是使用:

img.addEventListener("load", function(e) {...}); 

或(在旧版本的 IE 中):

img.attachEvent("onload", function(e) {...});

如果您只使用一个事件处理程序并且您没有使用已经为您抽象事件处理程序的跨平台库,那么使用.onload是最简单的。

而且,这是添加事件处理程序的简单跨浏览器方法:

// add event cross browser
function addEvent(elem, event, fn) {
    if (elem.addEventListener) {
        elem.addEventListener(event, fn, false);
    } else {
        elem.attachEvent("on" + event, function() {
            // set the this pointer same as addEventListener when fn is called
            return(fn.call(elem, window.event));   
        });
    }
}
于 2012-05-11T00:20:36.170 回答
5
var img = new Image();
img.onload = function() {
    console.log("load");
};
img.src = "img/domino/21.png";
console.log(img.complete);     // false
setTimeout(function() {
  console.log(img.complete);   // sometimes true, sometimes false
}, 10);

在 Chrome、Firefox 和 Safari 中

var img = new Image();
img.addEventListener('load',function() {
    console.log("load");
});
img.src = "img/domino/21.png";
console.log(img.complete);     // false
setTimeout(function() {
  console.log(img.complete);   // sometimes true, sometimes false
}, 10);

或者在 IE 或 Opera 中

var img = new Image();
img.attachEvent('onload',function() {
    console.log("load");
});
img.src = "img/domino/21.png";
console.log(img.complete);     // false
setTimeout(function() {
  console.log(img.complete);   // sometimes true, sometimes false
}, 10);
于 2012-05-11T00:16:58.217 回答
1

你确定你的图像img/domino/21.png存在吗?以下代码适用于Firebug的控制台。

var img = new Image();

var onload = function() {
    console.log('load');
}

img.onload = onload;

img.src = "http://img.gawkerassets.com/img/17m7otdiw6n8fjpg/original.jpg?" + (new Date()).getMilliseconds();
于 2012-05-11T00:15:56.367 回答
1

如果你可以使用 jQuery,它可以很简单:

$('img').load(foo).error(foo);

或使用香草 javascript:

img.onload = img.onerror = foo;
于 2012-05-11T00:16:24.160 回答
0
var img = new Image();

//blah blah...

img.addEventListener("load",function() {
    console.log("Loaded!");
});
于 2012-05-11T00:21:53.710 回答