2016-03-15 143 views
0

plot數組是一個全局變量, while console.log中的onrendered函數..,數據存在於canvas參數中。但..記錄的功能外時......,給空數組html2canvas同時更新畫布數據

html2canvas(document.querySelector(".classone"),{ 
    onrendered:function(canvas){ 
     plot_array.push({canvasdata:canvas.toDataURL('image/png')}); 
    } 
}); 

console.log(plot_array); 

情節陣列記錄爲空...

+0

如果我是正確的,則'onrendered'功能一旦畫布被渲染就調用。如果你在'html2canvas'後面調用'console.log',canvas將不會被渲染,因此沒有任何東西被推送到'plot_array'。 – Jacks

+0

嘗試在'push'之後移動'console.log(plot_array);''onrendered'函數內部。 – sideroxylon

+0

html2canvas函數實際上是在for循環中,所以我需要在渲染後記錄所有數據。 – aizQuad

回答

0

歡迎來到js。 html2canvas是一個異步函數。在早期版本中,你必須提供一個回調函數作爲參數,現在它確實使用了Promise。無論如何,你只需在你的調用之前設置一個計數器變量,並在回調中增加它。一旦計數器達到要調用的數量,所有異步功能都已完成,您可以繼續進行ajax調用。因此,與您的實際代碼(它使用的是舊版本的H2C)循環之前:var rendered = 0;然後在循環h2c(... onrendered: function(){...if(++rendered===calls.length){ajax()})})

的回答Kaiido

0

這是因爲渲染的事件尚未傳播。這是完全正常的和被接受的行爲:只有當畫布完成繪製時才需要填充該數組。

+0

任何我如何得到它,即:我怎麼能知道什麼時候畫布被渲染.. ?? – aizQuad

+0

當你進行基於事件的編程時,你必須考慮一點。例如,您將對此事件產生「反應」:顯示警報彈出窗口可能是第一個好的窗口。邏輯是你不再阻擋,等待操作完成。你能稍後再談一下你想做什麼嗎? – Pierre

+0

html2canvas函數實際上是在for循環中,所以,我需要所有數據在渲染後進行記錄。 – aizQuad