Menggunakan: context.clearRect(0, 0, canvas.width, canvas.height);
Ini adalah cara tercepat dan paling deskriptif untuk menghapus seluruh kanvas.
Jangan gunakan: canvas.width = canvas.width;
Menyetel canvas.width
ulang semua keadaan kanvas (mis. Transformasi, lineWidth, strokeStyle, dll.), Ini sangat lambat (dibandingkan dengan clearRect), itu tidak berfungsi di semua browser, dan itu tidak menggambarkan apa yang sebenarnya Anda coba lakukan.
Berurusan dengan koordinat yang diubah
Jika Anda telah memodifikasi matriks transformasi (misalnya menggunakan scale
, rotate
atau translate
) maka context.clearRect(0,0,canvas.width,canvas.height)
kemungkinan besar tidak akan menghapus seluruh bagian terlihat dari kanvas.
Solusinya? Setel ulang matriks transformasi sebelum membersihkan kanvas:
// Store the current transformation matrix
context.save();
// Use the identity matrix while clearing the canvas
context.setTransform(1, 0, 0, 1, 0, 0);
context.clearRect(0, 0, canvas.width, canvas.height);
// Restore the transform
context.restore();
Sunting:
Saya baru saja melakukan beberapa profil dan (di Chrome) sekitar 10% lebih cepat untuk menghapus kanvas 300x150 (ukuran standar) tanpa mengatur ulang transformasi. Ketika ukuran kanvas Anda meningkat, perbedaan ini menurun.
Itu sudah relatif tidak signifikan, tetapi dalam banyak kasus Anda akan menggambar jauh lebih banyak daripada yang Anda kliring dan saya percaya perbedaan kinerja ini tidak relevan.
100000 iterations averaged 10 times:
1885ms to clear
2112ms to reset and clear
clearRect
Anda harus memiliki konteks yang tidak diubah, atau melacak batasan Anda yang sebenarnya.