2017-03-03 74 views
0

我试图绘制当前在圆环中间盘旋的圆环段的百分比。在图表问题的中心绘制饼图段的百分比

我正在使用chartjs 2,所以我正在研究插件。它说on the documentation,一个插件可以被称为“afterEvent” - “当一个事件发生在画布上(mousemove,click等),这需要options.events属性处理”。页面上的代码如下:

afterEvent: function(chartInstance, event) {} 

但是,我不知道如何使用afterEvent状态。我通过例子such as this以静态的方式绘制在甜甜圈的中间。但我希望能够在'afterEvent'而不是'beforeDraw'上运行此代码。是否有任何有关“事件”参数中的事件数据的文档?如果它是悬停事件,它是否会以'onHover'的方式为我提供正在悬停的细分的价值?

我只是无法在任何地方找到任何进一步的文档。如果有人能指引我朝着正确的方向,那将会很棒。

谢谢你的时间。

回答

1

它很可能可以通过插件来实现,但这里是一种替代方法,可以给你完全相同的行为。

基本上,您使用位于图表中间的外部自定义工具提示,该工具提示在图表段悬停时触发。

下面是相关代码

Chart.defaults.global.tooltips.custom = function(tooltip) { 
    // Tooltip Element 
    var tooltipEl = document.getElementById('chartjs-tooltip'); 

    // Hide if no tooltip 
    if (tooltip.opacity === 0) { 
    tooltipEl.style.opacity = 0; 
    return; 
    } 

    // Set Text 
    if (tooltip.body) { 
    var total = 0; 

    // get the value of the datapoint 
    var value = this._data.datasets[tooltip.dataPoints[0].datasetIndex].data[tooltip.dataPoints[0].index].toLocaleString(); 

    // calculate value of all datapoints 
    this._data.datasets[tooltip.dataPoints[0].datasetIndex].data.forEach(function(e) { 
     total += e; 
    }); 

    // calculate percentage and set tooltip value 
    tooltipEl.innerHTML = '<h1>' + (value/total * 100) + '%</h1>'; 
    } 

    // calculate position of tooltip 
    var centerX = (this._chartInstance.chartArea.left + this._chartInstance.chartArea.right)/2; 
    var centerY = ((this._chartInstance.chartArea.top + this._chartInstance.chartArea.bottom)/2); 

    // Display, position, and set styles for font 
    tooltipEl.style.opacity = 1; 
    tooltipEl.style.left = centerX + 'px'; 
    tooltipEl.style.top = centerY + 'px'; 
    tooltipEl.style.fontFamily = tooltip._fontFamily; 
    tooltipEl.style.fontSize = tooltip.fontSize; 
    tooltipEl.style.fontStyle = tooltip._fontStyle; 
    tooltipEl.style.padding = tooltip.yPadding + 'px ' + tooltip.xPadding + 'px'; 
}; 

而一个working example为好。

+0

啊,这是伟大的,我不认为使用自定义工具提示方法。这正是我正在寻找的,并且具有使用CSS而不是在画布上进行样式设计的好处。再次感谢! – poncho

+0

嗨,我已经遇到了一个问题,现在我试图用我自己的图表来实现它。出于某种原因,tooltip.dataPoints不存在。我已经完成了检查元素并在该行上放置了一个断点,当我查看工具提示对象包含的内容时,dataPoints不在那里。有没有设置我没有打开或类似的东西?我的代码和你的代码看起来完全一样 - 除了事实上我的图表数据在使用过程中得到更新(就像我在一个新的数据点数组中存储数据之后做一个update()),这可能是问题吗? – poncho

+0

忽略最后一条评论,事实证明我使用的是chartjs 2.1,它在工具提示中没有datapoints属性。现在我改成2.5后,它完美的工作,再次感谢! – poncho