2016-12-16 34 views
1

我正在使用charts.js。對於我目前的需求,我設法找到一種方法來配置工具提示,無論懸停事件是否始終可見。我的問題是,工具提示可見性不符合數據集行爲。在charts.js上,您可以單擊數據集以將其從圖中移除。我的圖表是這樣做的,但工具提示仍然可見,浮動在圖形中,沒有數據集可以表示。點擊標籤時,是否有隱藏數據集數據的方法?如何使用各自的數據集隱藏工具提示

這是我說的當前狀態的一個例子。 https://jsfiddle.net/CaioSantAnna/ddejheg0/

HTML

<canvas id="linha"></canvas> 

的Javascript

Chart.plugins.register({ 
    beforeRender: function (chart) { 
     if (chart.config.options.showAllTooltips) { 
      // create an array of tooltips 
      // we can't use the chart tooltip because there is only one tooltip per chart 
      chart.pluginTooltips = []; 
      chart.config.data.datasets.forEach(function (dataset, i) { 
       chart.getDatasetMeta(i).data.forEach(function (sector, j) { 
        chart.pluginTooltips.push(new Chart.Tooltip({ 
         _chart: chart.chart, 
         _chartInstance: chart, 
         _data: chart.data, 
         _options: chart.options.tooltips, 
         _active: [sector] 
        }, chart)); 
       }); 
      }); 

      // turn off normal tooltips 
      chart.options.tooltips.enabled = false; 
     } 
    }, 
    afterDraw: function (chart, easing) { 
     if (chart.config.options.showAllTooltips) { 
      // we don't want the permanent tooltips to animate, so don't do anything till the animation runs atleast once 
      if (!chart.allTooltipsOnce) { 
       if (easing !== 1) 
        return; 
       chart.allTooltipsOnce = true; 
      } 

      // turn on tooltips 
      chart.options.tooltips.enabled = true; 
      Chart.helpers.each(chart.pluginTooltips, function (tooltip) { 
       tooltip.initialize(); 
       tooltip.update(); 
       // we don't actually need this since we are not animating tooltips 
       tooltip.pivot(); 
       tooltip.transition(easing).draw(); 
      }); 
      chart.options.tooltips.enabled = false; 
     } 
    } 
}); 

ctx = document.getElementById("linha"); 
    var linha = new Chart(ctx, { 
     type: 'line', 
     data: { 
      labels: ["January", "February", "March", "April", "May", "June", "July"], 
      datasets: [ 
       { 
        label: "My First dataset", 
        fill: true, 
        lineTension: 0.1, 
        backgroundColor: "rgba(75,192,192,0.4)", 
        borderColor: "rgba(75,192,192,1)", 
        borderCapStyle: 'butt', 
        borderDash: [], 
        borderDashOffset: 0.0, 
        borderJoinStyle: 'miter', 
        pointBorderColor: "rgba(75,192,192,1)", 
        pointBackgroundColor: "#fff", 
        pointBorderWidth: 1, 
        pointHoverRadius: 5, 
        pointHoverBackgroundColor: "rgba(75,192,192,1)", 
        pointHoverBorderColor: "rgba(220,220,220,1)", 
        pointHoverBorderWidth: 2, 
        pointRadius: 1, 
        pointHitRadius: 10, 
        data: [65, 59, 80, 81, 56, 55, 40], 
        spanGaps: false, 
        responsive: true, 
        animation: true, 
       }, 
       { 
        label: "Second dataset", 
        fill: true, 
        lineTension: 0.1, 
        backgroundColor: "rgba(0,0,0,0.4)", 
        borderColor: "rgba(0,0,0,1)", 
        borderCapStyle: 'butt', 
        borderDash: [], 
        borderDashOffset: 0.0, 
        borderJoinStyle: 'miter', 
        pointBorderColor: "rgba(0,0,0,1)", 
        pointBackgroundColor: "#fff", 
        pointBorderWidth: 1, 
        pointHoverRadius: 5, 
        pointHoverBackgroundColor: "rgba(0,0,0,1)", 
        pointHoverBorderColor: "rgba(0,0,0,1)", 
        pointHoverBorderWidth: 2, 
        pointRadius: 1, 
        pointHitRadius: 10, 
        data: [13, 78, 60, 75, 90, 10, 27], 
        spanGaps: false, 
        responsive: true, 
        animation: true, 
       } 
      ] 
     }, 
     options: { 
      tooltips: { 
       callbacks: { 
        title: function (tooltipItem, data) { return "" }, 
        label: function (tooltipItem, data) { 
         var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; 
         var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || 'Other'; 
         var label = data.labels[tooltipItem.index]; 
         return value; 
        } 
       } 
      },showAllTooltips: true 
     } 
    }); 

要重現此問題,只需點擊圖上的頂部的一個標籤。

在此先感謝。

回答

0

只是爲了結束這個問題,我最終變成了amcharts(https://www.amcharts.com/)。它具有像我試圖用chart.js實現的功能,並且可以在鏈接許可下自由使用。

再次感謝。