问题描述
|
我正在使用一个jQuery插件,该插件会在页面上的所有图片均加载完毕后调用回调。它检查
imageObject.complete
属性,并将处理程序绑定到load
和error
事件,以确定何时完成图像加载。
这很好用,但是我遇到的问题是,即使图像被认为已加载,当我检查图像或其包含div
元素的height
和width
属性时,尺寸尚未更新。
这是一个例子:
http://jsfiddle.net/RtnVx/12/
在尝试访问height
和width
尺寸之前,如何确保已调整容纳元素的大小以适合图像?
编辑1:我清理并注释了jsfiddle中的代码,以使示例更易于理解。
编辑2:必须有一个基于缓存的竞争条件或差异,因为当我从另一台计算机上运行代码时,它可以正常工作(即,最高边距计算正确),实际上是不好的,因为它不一致。 Chrome,FWIW中的不一致现象更加明显。
另外,要明确一点,目标不是每次加载图像时都调用ѭ8。相反,应在通过AJAXload
调用加载所有图像之后才一次调用init
。
解决方法
答案:http://jsfiddle.net/morrison/RtnVx/30/
在图像加载完成之前,您无需致电ѭ11。我在加载的图像上创建了一个事件。
更新说明:
我剪出了您的jQuery插件。这太复杂了,我并不完全理解。
我当前的解决方案与插件一样,通过使用provides2ѭ事件来提供错误处理。
解决过程:
找到所有从ѭ14降序的
img
,并将该长度存储在.data()
属性中,并存储一个变量以保持加载的数量。
在每个img
上绑定load
和error
事件,以更新已加载图像的计数。
如果已加载/错误图像的数量达到图像总数,请致电setTimeout()
,直到所有宽度均大于零,然后触发init()
。