क्या हो रहा है चार्ट.जैस कैनवास के आकार को गुणा करता है जब इसे कहा जाता है तो सीएसएस का उपयोग करके इसे वापस स्केल करने का प्रयास किया जाता है, इसका उद्देश्य उच्च-डीपीआई उपकरणों के लिए उच्च रिज़ॉल्यूशन ग्राफ प्रदान करना है।
समस्या यह है कि यह एहसास नहीं है कि यह पहले से ही ऐसा कर चुका है, इसलिए जब क्रमिक समय कहा जाता है, तो यह पहले से ही गुणा (दोगुना या जो भी) आकार फिर से हो जाता है जब तक कि चीजें टूटने लगती हैं। (वास्तव में क्या हो रहा है, यह जाँच कर रहा है कि क्या यह चौड़ाई और ऊँचाई के लिए DOM विशेषता को बदलकर कैनवस में और अधिक पिक्सेल जोड़ सकता है, यदि ऐसा होना चाहिए, तो इसे किसी कारक से गुणा करना, आमतौर पर 2, फिर इसे बदलना, और फिर सीएसएस शैली को बदलना। पृष्ठ पर समान आकार बनाए रखने के लिए विशेषता।)
उदाहरण के लिए, जब आप इसे एक बार चलाते हैं और आपकी कैनवास की चौड़ाई और ऊंचाई 300 पर सेट हो जाती है, तो यह उन्हें 600 पर सेट करता है, फिर शैली विशेषता को 300 में बदल देता है ... लेकिन यदि आप इसे फिर से चलाते हैं, तो यह देखता है कि DOM की चौड़ाई और ऊंचाई 600 हैं (इस सवाल के अन्य उत्तर को देखें कि क्यों देखें) और फिर इसे 1200 पर सेट करें और सीएसएस की चौड़ाई और ऊंचाई 600 तक।
सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन मैंने रेटिना उपकरणों के लिए संवर्धित रिज़ॉल्यूशन को बनाए रखते हुए बस कैनवास की चौड़ाई और ऊंचाई को मैन्युअल रूप से सेट करके प्रत्येक चार्ट पर कॉल करने से पहले इस समस्या को हल किया।
var ctx = document.getElementById("canvas").getContext("2d");
ctx.canvas.width = 300;
ctx.canvas.height = 300;
var myDoughnut = new Chart(ctx).Doughnut(doughnutData);