【发布时间】:2014-12-07 04:51:32
【问题描述】:
单击按钮后,开始加载图像。我想要的是:当图像完全加载时,正在调用一个函数。
我知道以前有人问过这个问题,但每个答案都建议使用onload 事件,这并不完全正确。根据 W3C 规范,onload 不是 IMG 元素的有效事件。如果不是因为在某些情况下事件没有被触发这一事实,我不会很困扰。
一切正常,除非图像重量很大并且加载过程需要一些时间(例如 20 秒)。我猜onload 事件可能设置了一些最长等待时间。大图示例代码(在 Chrome 上测试,你必须清除缓存才能再次测试它,如果你有一些超快的网络,你可能需要用更大的图像来测试它):
$(new Image()).attr('onload', 'worksFunc()').attr('src', "http://wallpaperus.org/wallpapers/04/151/outer-space1-1472x6429-wallpaper-1634552.jpg").appendTo($('body'));
解决方案可能在 jQuery 中,但不一定。
【问题讨论】:
-
您的代码无效,您关闭并重新打开字符串中的引号。
"function(){ console.log("works!"); }"。另外,为什么要使用 onload 作为属性?你可以做.on('load', function(){ console.log("works!"); })。 -
另外,如果你能引用 W3C 规范中提到的
onload对img元素无效的地方,那将会很有帮助。只要我在设置src属性之前添加侦听器,我就从来没有遇到过在图像上使用事件的问题(即使那样,这个问题也只是在旧版本的 IE 中)。 -
更正了引号,至于其余的,没关系,只是一个例子,我不使用这段代码。
-
@AlexanderO'Mara 我在这里读到了(第一条评论):stackoverflow.com/questions/280049/…。而且,正如我的测试所示,这是真的。
-
我无法使用
$(new Image()).attr('onload', 'alert("works")').attr('src', "http://wallpaperus.org/wallpapers/04/151/outer-space1-1472x6429-wallpaper-1634552.jpg").appendTo($('body'));重现您的问题。我通过中断互联网连接强制下载图像需要更长的 20 秒时间。
标签: javascript jquery html image dom