2013-10-22 115 views
0

我想要drawImage放在畫布標籤上,然後再次保存。我使用jQuery的deferred.done()jQuery推遲不工作鉻和Safari瀏覽器?

這裏是我使用的代碼:

function save_submit() { 
    LoadDraw().done(function(){ 
     var canvas = document.getElementById('touchpaint'); 
     var ctx = canvas.getContext('2d'); 
     var image = canvas.toDataURL(); 
    }); 
var LoadDraw = function() { 
    var r = $.Deferred(); 
    var canvas = document.getElementById('touchpaint'); 
    var ctx = canvas.getContext('2d'); 
    var imageLoader = 'http://img262.imageshack.us/img262/3453/gokum.jpg'; 
    var img = new Image(); 
    $(img).load(function(){ 
     ctx.globalCompositeOperation = "destination-over"; 
     ctx.drawImage(img,0,0); 
    }); 
    img.crossOrigin = ''; 
    img.src = imageLoader;  
    r.resolve(); 
    return r; 
    } 

它工作正常的Firefox。但在Chrome和Safari上不起作用。我正在尋求幫助。謝謝。

+2

'但在Chrome和Safari'不行 - 你能更具體?什麼不起作用?你得到什麼錯誤? –

+0

我畫在畫布上後。我想保存canvas + imageBackground。在Firefox上,我可以保存畫布+背景。但在Chrome或Safari上不保存背景。它不報告任何錯誤。這只是保存畫布。 – JohnEvans

回答

0

那麼,你沒有正確使用Deferred。 Deferred對象的想法是在某種回調函數中解析它,而不是在創建它之後「直接」解析它。

在你的情況,你可能應該解決在$(IMG).load回調函數的延遲(R):

var LoadDraw = function() { 
    var r = $.Deferred(); 
    var canvas = document.getElementById('touchpaint'); 
    var ctx = canvas.getContext('2d'); 
    var imageLoader = 'http://img262.imageshack.us/img262/3453/gokum.jpg'; 
    var img = new Image(); 
    $(img).load(function(){ 
     ctx.globalCompositeOperation = "destination-over"; 
     ctx.drawImage(img,0,0); 
     r.resolve(); 
    }); 
    img.crossOrigin = ''; 
    img.src = imageLoader;  

    return r; 
    } 
+0

第一個,非常感謝。但是,在函數LoadDraw()完成之後。我無法獲得canvas.toURLdata(); – JohnEvans

+0

爲什麼不呢?當圖像完全加載時,你應該可以使用toURLdata函數,對嗎? –

+0

對。我想是這樣。我嘗試加載圖像到畫布。但函數LoadDraw沒有運行完成。沒有完成。函數DrawLoad出現錯誤。 – JohnEvans

相關問題