用于Canvas的GWT图像加载(onLoad)

时间:2011-10-12 04:09:30

标签: html5 gwt canvas image-loading

不使用任何图像加载库,我正在加载和处理如下图像:

ImageGenerator(){
  for(int i=0;i<100;i++){
      ImageProcess( data-i , i );
  }
}

ImageProcess( String data , int i ){
  final Image img = new Image(data);
  img.setVisible(false);
  RootPanel.get().add(img);
  GWT.log( "image " + i );
  img.addLoadHandler(new LoadHandler() {
      @Override
      public void onLoad(LoadEvent event) {
          GWT.log( "onload " + i + " " + img.getWidth() );
          ImageElement data = ImageElement.as(img.getElement());
          RootPanel.get().remove(img);
          obj.setData(data);
          ..obj processing
      }
  });
}

结果:

image 1;
image 2;
image 3;
..
image 98;
image 99; <-- finish for loop
onload 1; <-- start loading image
onload 2;
onload 3;
..
onload 98;
onload 99;

但我希望它看起来像:

image 1;  <-- generate image and load image step by step
onload 1;
image 2;
onload 2;
image 3;
onload 3;
..
image 98;
onload 98;
image 99;
onload 99;

我知道在为img.src分配值后,图像不会立即可用。它必须先加载。一旦图像加载完毕,img元素将触发onload事件。我尝试添加计时器并将图像放到不同的DOM元素。它不起作用。

我的问题是,如何触发图像元素立即加载?或者让ImageProcess等到onload完成?

1 个答案:

答案 0 :(得分:0)

 RootPanel.get().add(img);

使用此行可强制图像直接加载。 我认为您的问题是,即使从服务器传输了一个图像之前,循环也已完成 - 因此您首先看到图像输出,然后是输出。

现在我不确定为什么添加图像,执行onload,添加下一张图像等等对你来说如此重要......

但我确信通过编写一个向DOM添加图像的方法可以很容易地实现这一点,并且在其onload处理程序中,您可以再次为下一个图像调用该方法。等等,直到达到停止标准。

问候 斯蒂芬