2014-03-19 43 views
0

我有繪圖應用程序,允許用戶在畫布上繪製各種形狀。代碼在Chrome,IE 10,IE 9(9.0.8112.16421)上經過測試和正常工作,但它在IE 9(9.0.8112.16421 64位版本)上顯示出荒謬的行爲。主要問題是圖像不能在畫布上繪製一段時間)。無法找出原因,如果我開始調試或加載圖像之間的警報,並在畫布上繪製它們,然後它正常工作。像圖像的東西沒有得到充分加載,但如果這是原因,那麼它應該在IE 9版本中表現類似不是64位版本。任何線索如何處理這個問題?代碼無法在特定版本的IE9上工作

回答

0

線索:

該應用程序通過不表示應顯示的圖像即間歇行爲不端。

該應用程序吸引正確的,如果:

  • 開始加載圖像駁回警告框

聽起來你不給你的圖片時間後

  • 警告框
  • 恢復應用程序在嘗試繪製圖像之前加載。

    // This doesn't guarantee image1 is fully loaded before trying to use it 
    
    var image1=new Image(); 
    image1.src="myImage.png"; 
    context.drawImage(image1,0,0); 
    

    的解決辦法是使用時圖像滿載

    // This guaranteed image1 is fully loaded before trying to use it 
    
    var image1=new Image(); 
    image1.onload=function(){ 
        context.drawImage(image1,0,0); 
    } 
    image1.src="myImage.png"; 
    

    如果你有許多圖像加載它觸發了圖像的.onload回調,這裏要說的是加載所有的圖像加載器圖像然後調用start():

    var imagesOK=0; 
    var imgs=[]; 
    var imageURLs=[]; 
    // .push all your image urls into imageURLs[] 
    // imageURLs.push("myImage1.png"); 
    // imageURLs.push("myImage2.png"); 
    imageURLs.push(""); 
    loadAllImages(start); 
    
    function loadAllImages(callback){ 
        for (var i=0; i<imageURLs.length; i++) { 
         var img = new Image(); 
         imgs.push(img); 
         img.onload = function(){ 
          imagesOK++; 
          if (imagesOK>=imageURLs.length) { 
           callback(); 
          } 
         }; 
         img.onerror=function(){alert("image load failed");} 
         img.crossOrigin="anonymous"; 
         img.src = imageURLs[i]; 
        }  
    } 
    
    function start(){ 
    
        // the imgs[] array holds fully loaded images 
        // the imgs[] are in the same order as imageURLs[] 
    
    }