我想在图片加载完成后创建一个提示框,但如果该图片已经存在于浏览器缓存中,则不会触发.onload
事件。
无论图片是否被缓存,如何在图片加载完成后触发提示框?
var img = new Image();
img.src = "img.jpg";
img.onload = function () {
alert("image is loaded");
}
我想在图片加载完成后创建一个提示框,但如果该图片已经存在于浏览器缓存中,则不会触发.onload
事件。
无论图片是否被缓存,如何在图片加载完成后触发提示框?
var img = new Image();
img.src = "img.jpg";
img.onload = function () {
alert("image is loaded");
}
由于您正在动态生成图像,请在 src
之前设置 onload
属性。
var img = new Image();
img.onload = function () {
alert("image is loaded");
}
img.src = "img.jpg";
Fiddle - 在最新的 Firefox 和 Chrome 版本上测试通过。
你也可以使用此文章中的答案,我将它适用于单个动态生成的图像:
var img = new Image();
// 'load' event
$(img).on('load', function() {
alert("image is loaded");
});
img.src = "img.jpg";
=]
它利用 .complete
检查,以防图像已经被缓存,因此代码进行了演示。当然,为了最佳实践,您可以在所有处理程序绑定之后设置 src
。 - Fabrício Mattéimg.src
,那么在赋新的src之前,需要先将其设为空字符串''
。 - quuxonload
HTML属性应该会为缓存的图像触发。也许你可以提一个新问题,这样社区会更关注。=]
- Fabrício Matté如果src已经设置,那么在缓存的情况下事件会在绑定事件处理程序之前触发。因此,你应该基于 .complete
触发事件。
代码示例:
$("img").one("load", function() {
//do stuff
}).each(function() {
if(this.complete || /*for IE 10-*/ $(this).height() > 0)
$(this).load();
});
Add a unique suffix to the image src
to force browser downloading it again, like this:
var img = new Image();
img.src = "img.jpg?_="+(new Date().getTime());
img.onload = function () {
alert("image is loaded");
}
在这段代码中,每次将当前时间戳添加到图像URL的末尾,使其变得唯一,浏览器会重新下载该图像。
.src
值之前设置.onload
处理程序,就不会错过IE某些版本中的onload
事件。 - jfriend00今天我遇到了同样的问题。尝试了各种方法之后,我发现只需将调整代码放在$(window).load(function() {})
而不是document.ready
中会解决部分问题(如果您没有ajax页面)。
$(document).ready
更改为 $(window).load
解决了我的问题。 - Tariqul Islam我的改进:
document.addEventListener("DOMContentLoaded", function () {
let el = document.getElementsByTagName("img")
Object.values(el).forEach(function (el) {
var img = new Image();
img.onload = function () {
el.style.opacity = 1;
}
img.src = el.src
})
});
.
<style>
img {
opacity: 0;
transition: opacity .4s cubic-bezier(.25, .45, .45, .95);
}
</style>
我发现在Chrome中你可以这样做:
$('.onload-fadein').each(function (k, v) {
v.onload = function () {
$(this).animate({opacity: 1}, 2000);
};
v.src = v.src;
});