我对complete
属性的理解遇到了一些问题。
如果图片已正确下载并解码,我认为complete
为true
。
MDN says ...
如果浏览器已经提取了图像,则为真,并且它位于supported image type中,并且没有错误地解码。
因此,我假设在complete
事件被触发之前检查图像的load
属性将返回false
(图像未被获取)。在jsFiddle中隔离此内容时,在结束true
标记之前检查script
元素内的属性时,我一直收到</body>
。
我还experimented更改了图片的src
属性,然后立即检查其complete
属性。我可以在浏览器中看到complete
即使在下载图像之前也会以true
的形式返回(我正在通过Firebug中的 Net 面板查看其进度)。 / p>
我期待的行为是否正确?有没有办法像我期望的那样让它发挥作用?
目前正在使用Firefox 7.0.1进行测试。这可能是一个Firefox错误,但只有other question作为证据。
答案 0 :(得分:8)
来自w3c-docs
如果满足以下任何条件,则IDL属性complete必须返回true 条件是真的:
- 省略src属性。
- src属性的值为空字符串。
- 一旦获取资源,网络任务源排队的最终任务已排队,但尚未排队 运行,并且img元素未处于损坏状态。
- img元素完全可用。
听起来结果是正确的。
假设高速缓存初始图像,则已经获取了图像
当您更改src
(排队另一个任务)
我玩了一下,当你在设置新的src之前删除src属性时,看起来好像得到了预期的结果。演示:http://jsfiddle.net/doktormolle/UNEF7/
说明:当没有src属性存在时,图像的状态变为“已损坏”(第三个条件将不再匹配)并且在新的资源已经完成之前它将不会完成加载。
答案 1 :(得分:2)
我已经得到了答案,但你不会喜欢它......
当使用document.createElement
创建相关图片时,它可以正常工作。见http://jsfiddle.net/minitech/nmuQ8/
我发现在创建测试以查看是否工作时这是有效的,所以到目前为止,我还没有办法判断替换是否真的是必要的,不幸的是。 / p>