我使用的是一个jQuery插件,它在加载页面上的所有图像后调用回调。它检查imageObject.complete
属性,并将处理程序绑定到load
和error
事件,以确定图像加载何时完成。
这很好,但我遇到的问题是,即使图像被认为是加载的,当我检查图像或其包含的div
元素的height
和width
属性时,维度尚未更新。
这里有一个例子:
http://jsfiddle.net/RtnVx/12/
在尝试访问其height
和width
维度之前,如何确保已调整包含元素的大小以适合图像?
EDIT1:我清理并注释了jsfiddle中的代码,以使示例更易于理解。
编辑2:必须存在基于缓存的竞争条件或变化,因为当我从不同的机器运行代码时,它工作正常(即,上边距计算正确),这实际上是不好,因为它不一致。这种不一致性在Chrome、FWIW中更为明显。
此外,需要明确的是,目标不是每次加载图像时都调用init
;相反,在通过AJAX load
调用加载了所有图像之后,init
应该被调用一次。
答案:http://jsfiddle.net/morrison/RtnVx/30/
在加载完图像之前,您不需要调用
batchImageLoad
。我在加载的图像上创建了一个事件
更新说明:
- 我删掉了你的jQuery插件太复杂了,我没有完全理解
- 我当前的解决方案通过使用
error
事件提供错误处理,插件也是如此 -
解决方案过程:
- 查找从
#slides
开始递减的所有img
,并将该长度存储在.data()
属性中,以及一个变量以保持已加载的数量 - 在每个
img
上绑定一个load
和error
事件,更新加载图像的计数 - 如果加载/错误图像的计数达到总图像计数,则调用
setTimeout()
,直到所有图像的宽度都大于零,然后激发init()
- 查找从