- 在帖子底部回答
我创建了一个网站,该网站显示了许多图像并将它们绘制在画布上。这些图像是 PreloadedImage 实例,并在其加载事件上触发 draw 方法。这在 Chrome 中运行良好,但在 Internet Explorer 中,当使用 PreloadedImage.getWidth() 或 getOffsetWidth() 或通过 getElement().getStyle().getWidth() 要求时(在 Chrome 中,它们的宽度是正确的),它们的宽度为 0 ...
在 Eclipse 中检查 PreloadedImage 的实例时,我可以看到元素确实具有正确的宽度和高度,但是当 GWT 请求它时,结果为零,导致绘制不正确。
有任何想法吗?
- 编辑 1:通过使用计时器等待加载完成来尝试:
我快速尝试等待图像渲染,但似乎根本没有加载:
currentImage = new PreloadedImage();
currentImage.addLoadHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent event) {
Timer timer = new Timer() {
@Override
public void run() {
System.out.println("timer check: width: " +currentImage.getWidth());
if(currentImage.getWidth()>0) {
//draw the image
this.cancel();
}
}
};
timer.scheduleRepeating(100);
}
});
- 编辑2:更多信息:
加载图像后,在绘图之前,我会请求其尺寸。检查 currentImage(PreloadedImage 的实例)时,toString 方法返回以下内容:
<img aria-hidden="true"
style="display: none; visibility: hidden;"
class="PRELOADEDIMAGE"
src="/imageservlet?filename=1368280253128&height=1000" width="1505" height="1000">
请注意,宽度和高度设置正确。但是,当请求以下内容时:
currentImage.getWidth()
currentImage.getOffsetWidth()
String heightattr = e.getAttribute("height");
我始终得到零结果。我怀疑与符号的编码有问题,但 Internet Explorer 处理它的方式与 Chrome 相同(最后,相同的 url 用于获取图像,这是正确的)。