如果我在'toDataURL'和使用結果畫布繪製之間放置一個警報,那麼一切都按預期進行。畫布圖像裁剪 - canvas.toDataURL是異步行爲這是否會返回任何種類的承諾
是否toDataURL在畫布上觸發事件,或者我應該使用某種'onLoad'作爲圖像src我將它設置爲?
IE img.addEventListener( '負荷',函數(){...}
如果我在'toDataURL'和使用結果畫布繪製之間放置一個警報,那麼一切都按預期進行。畫布圖像裁剪 - canvas.toDataURL是異步行爲這是否會返回任何種類的承諾
是否toDataURL在畫布上觸發事件,或者我應該使用某種'onLoad'作爲圖像src我將它設置爲?
IE img.addEventListener( '負荷',函數(){...}
.toDataURL
是不會觸發任何事件的同步操作。
作爲同步,這是一個阻塞操作所以沒有需要alert
以防止在toDataURL完全完成之前執行下一個命令。當toDataURL完全完成時,將執行下一個命令。
由於您使用dataURL作爲圖像源,因此您需要爲該圖像時間通過分配回調加載:
var img=new Image();
img.onload=function(){
ctx.drawImage(img,0,0);
}
img.src=canvas.toDataURL();
.toDataURL是一種不觸發任何事件的同步操作。 對於Chrome 57,這不是真的。不知道這是一個錯誤還是故意的。
它的用意是:https://bugs.chromium.org/p/chromium/issues/detail?id=514206 – mems
雖然這很奇怪,但這是我的理解。在使用image.src = ... toDataURL之後添加警報,可以將圖像寫入另一個畫布,而不會向其他畫布寫入任何內容。也許這與使用兩個獨立的功能有關? –
是的,您需要將'image.onload = function(){...圖像在此處完全加載...}'附加到您的代碼中。 – markE
是的,工作!那麼,即使在編程完成時,我假設圖像加載是異步事件? –