Olan şey, Chart.js'nin çağrıldığında tuvalin boyutunu çoğaltması ve ardından CSS kullanarak onu küçültmeyi denemesi, amacı yüksek dpi cihazlar için daha yüksek çözünürlüklü grafikler sağlamaktır.
Sorun şu ki, bunu zaten yaptığının farkında değil, bu yüzden ardışık zamanlar çağrıldığında, işler bozulmaya başlayana kadar zaten (iki katına çıkmış veya her neyse) boyutu TEKRAR çarpıyor. (Aslında olan şey, genişlik ve yükseklik için DOM özniteliğini değiştirerek, bunu bir faktörle, genellikle 2 ile çarparak, sonra bunu değiştirerek ve sonra css stilini değiştirerek tuvale daha fazla piksel ekleyip eklemeyeceğini kontrol etmektir. sayfada aynı boyutu korumak için özellik.)
Örneğin, bir kez çalıştırdığınızda ve tuval genişliğiniz ve yüksekliğiniz 300 olarak ayarlandığında, bunları 600 olarak ayarlar, ardından stil özelliğini 300 olarak değiştirir ... ancak yeniden çalıştırırsanız, DOM genişliğini ve yüksekliğini görür. 600'dür (nedenini görmek için bu sorunun diğer cevabını kontrol edin) ve ardından bunu 1200'e ve css genişliğini ve yüksekliğini 600'e ayarlar.
En zarif çözüm değil, ancak bu sorunu, Chart.js'ye yapılan her ardışık çağrıdan önce tuvalin genişliğini ve yüksekliğini manuel olarak ayarlayarak retina cihazları için gelişmiş çözünürlüğü korurken çözdüm.
var ctx = document.getElementById("canvas").getContext("2d");
ctx.canvas.width = 300;
ctx.canvas.height = 300;
var myDoughnut = new Chart(ctx).Doughnut(doughnutData);