我的图像已加载完毕,但其高度和宽度尚未更新.这是什么时候发生的



我使用的是一个jQuery插件,它在加载页面上的所有图像后调用回调。它检查imageObject.complete属性,并将处理程序绑定到loaderror事件,以确定图像加载何时完成。

这很好,但我遇到的问题是,即使图像被认为是加载的,当我检查图像或其包含的div元素的heightwidth属性时,维度尚未更新。

这里有一个例子:

http://jsfiddle.net/RtnVx/12/

在尝试访问其heightwidth维度之前,如何确保已调整包含元素的大小以适合图像

EDIT1:我清理并注释了jsfiddle中的代码,以使示例更易于理解。

编辑2:必须存在基于缓存的竞争条件或变化,因为当我从不同的机器运行代码时,它工作正常(即,上边距计算正确),这实际上是不好,因为它不一致。这种不一致性在Chrome、FWIW中更为明显。

此外,需要明确的是,目标不是每次加载图像时都调用init;相反,在通过AJAX load调用加载了所有图像之后,init应该被调用一次

答案:http://jsfiddle.net/morrison/RtnVx/30/

在加载完图像之前,您不需要调用batchImageLoad。我在加载的图像上创建了一个事件

更新说明:

  • 我删掉了你的jQuery插件太复杂了,我没有完全理解
  • 我当前的解决方案通过使用error事件提供错误处理,插件也是如此
  • 解决方案过程:
    • 查找从#slides开始递减的所有img,并将该长度存储在.data()属性中,以及一个变量以保持已加载的数量
    • 在每个img上绑定一个loaderror事件,更新加载图像的计数
    • 如果加载/错误图像的计数达到总图像计数,则调用setTimeout(),直到所有图像的宽度都大于零,然后激发init()

最新更新