正如对此所建议的answer https://stackoverflow.com/questions/11928878/detect-image-corrupt-or-truncated-in-firefox与您类似的问题:
看来,当更改 img 标签的 src 属性时,
Firefox 触发加载事件。这与 HTML5 是相反的
规范,其中说如果 src 属性改变,那么
任何其他已经在进行的提取都应该结束(火狐浏览器
做),并且不应发送任何事件。应发送加载事件
仅当提取成功完成时。所以我想说的是事实
您收到加载事件是 Firefox 的一个错误。
进而:
最好的选择可能是每次创建一个新元素
希望更改 src 属性。
这是有道理的。
里面lazyload
代码中,您会发现这一部分,似乎是在图像加载时响应触发的滚动事件appear
:
/* When appear is triggered load original image. */
$self.one("appear", function() {
if (!this.loaded) {
if (settings.appear) {
var elements_left = elements.length;
settings.appear.call(self, elements_left, settings);
}
$("<img />")
.bind("load", function() {
var original = $self.attr("data-" + settings.data_attribute);
$self.hide();
if ($self.is("img")) {
$self.attr("src", original);
} else {
$self.css("background-image", "url('" + original + "')");
}
$self[settings.effect](settings.effect_speed);
self.loaded = true;
您可以放置一个 AND 运算符,后跟一些标志或函数返回,以验证最后一个图像是否已完全加载到该部分:
if ($self.is("img") && lastImageIsLoadde() === true) { /*pseudocode here*/
从而防止img src
在正确时间之前被替换(因为settings.placeholder
是脚本在滚动时取代要加载的图像的图像),看看它是否适合您。