उपयोग: context.clearRect(0, 0, canvas.width, canvas.height);
यह संपूर्ण कैनवास को साफ़ करने का सबसे तेज़ और सबसे वर्णनात्मक तरीका है।
प्रयोग नहीं करें: canvas.width = canvas.width;
canvas.width
रीसेटिंग सभी कैनवस स्टेट (जैसे ट्रांसफ़ॉर्मेशन, लाइनविद, स्ट्रोकसैल, इत्यादि) को रीसेट करता है, यह बहुत धीमा है (क्लियररिट की तुलना में), यह सभी ब्राउज़रों में काम नहीं करता है, और यह वर्णन नहीं करता है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं।
रूपांतरित निर्देशांक से निपटना
आप परिवर्तन मैट्रिक्स संशोधित है (उदाहरण के लिए का उपयोग कर scale
, rotate
या translate
) तो context.clearRect(0,0,canvas.width,canvas.height)
संभावना कैनवास के पूरे दृश्य भाग स्पष्ट नहीं होंगे।
समाधान? कैनवास को साफ करने से पहले परिवर्तन मैट्रिक्स को रीसेट करें:
// 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();
संपादित करें:
मैंने अभी कुछ प्रोफाइलिंग की है और (क्रोम में) यह ट्रांसफ़ॉर्म को रीसेट किए बिना 300x150 (डिफ़ॉल्ट आकार) कैनवास को साफ़ करने के लिए लगभग 10% तेज है। जैसे-जैसे आपके कैनवास का आकार बढ़ता है यह अंतर गिरता है।
यह पहले से ही अपेक्षाकृत नगण्य है, लेकिन ज्यादातर मामलों में आप समाशोधन कर रहे हैं की तुलना में आप काफी अधिक ड्राइंग करेंगे और मेरा मानना है कि यह प्रदर्शन अंतर अप्रासंगिक है।
100000 iterations averaged 10 times:
1885ms to clear
2112ms to reset and clear
clearRect
आपके लिए या तो एक अनियंत्रित संदर्भ होना चाहिए, या अपनी वास्तविक सीमाओं का ध्यान रखें।