2015-05-05 25 views
7

üzerinde gezinirken glitch'i yeniden çizme ChartJS kütüphanesinden yararlanan aşağıdaki koda sahibim.ChartJs çizgi grafiği

/*assume the tags in the right place */ 

<canvas id="graph1" width="300" height="300"></canvas> 

var ctx = $("#graph1").get(0).getContext("2d"); 
var myChart = new Chart(ctx).Line(graph1Generator("day")); 

... her şey iyi çalışır, ancak temizlemek ve farklı veri ile aynı grafiği yeniden boyamak için aşağıdaki olay işleyicisi ekledikten sonra, bir aksaklık meydana gelir.

weekButton.addEventListener("click", function(){ 
    ctx.clearRect (0, 0, 300, 300); 
    ctx.canvas.width = 300; 
    ctx.canvas.height = 300; 
    myChart = new Chart(ctx).Line(graph1Generator("week")); 

Bu kodu başarıyla yeni verilerle grafiği yeniden çizmek, ama ben üzerine geldiklerinde, onu temizlemek gerekiyordu o eski grafiğe bazı çok garip "flashback" yapar. Bu, eski olanı temizlemediğine inanmamı sağlıyor.

+0

Olay işleyicisinde yeni bir tane oluşturmak yerine eski grafik nesnesini yeniden kullanırsanız, çalışacağını düşünüyorum. Alternatif olarak, yeni bir tane oluşturmadan hemen önce de 'myChart.destroy(); – Pointy

+0

Eski grafik nesnesini yeni verilerle nasıl yeniden kullanırım? Grafikler aynı olsa da, farklı veri türleri var. Ayrıca, 'myChar.destroy();' her olaydan sonra grafik boyutumu çoğaltıyor gibi görünüyor. Bu neden oluyor? – ApathyBear

+0

Sadece bence “myChart.Line (graph1generator (" week "));' (veya yeni veriler için ne yapmanız gerekiyorsa). Ve tuvali kodunuzla temizlemekten ziyade, Chart'ın yapmasına izin verin: 'myChart.clear();'. (Bu .destroy() 'dan daha iyi çalışabilir; emin değilim.) – Pointy

cevap

7

Here is an update to your fiddle. (işlev adı yazım hatası tespit dışında), birincil bir değişiklik, bu yüzden

myChart = new Chart(ctx).Line(...); 

.destroy() yöntemi vb olay giderici kayıt kurtulur gibi hatları önce

myChart.destroy(); 

eklemektir Grafiklerin üzerine farenizi koyduğunuzda bu tuhaf "hayalet çizelgeleri" ni görmemelisiniz.

+0

jsfiddle'ın çalışmasına rağmen garip bir yan etkisi var. Kemanda, her bir olay işleyicisi çalıştırıldıktan sonra diğer tuvalin boyutu da katlanarak artmaya başlar. Sayfamda (safari'de test), çizgi grafik sadece katlanarak büyür. Tam kodunu çalıştırıyorum, bunun gerçekleşmemesi için bir yol var mı? – ApathyBear

+0

@ApathyBear Koşarken daha büyük bir şey görmüyorum. Diğer grafikler için '.destroy()' çağrılarını da ekleyebilirsiniz, ancak bunu denediğimde pek farketmez. – Pointy

+0

@ApathyBear Firefox ve Chrome'u denedim ve her iki durumda da pasta ve çörek çizelgeleri hiç değişmedi. – Pointy

İlgili konular