Chart.js使用条形图单击标签

Nivelety

我的Chart.js交互性需要帮助。单击标签时,我需要返回单击的列(索引)号。

我尝试使用getElementsAtEvent,但只有直接在图表上单击才能使用。

这个http://jsfiddle.net/yxz2sjam/几乎是我要寻找的东西,但新版本中不再提供getPointsAtEvent。

canvas.onclick = function (evt) {
var points = chart.getPointsAtEvent(evt);
alert(chart.datasets[0].points.indexOf(points[0]));
};

我还发现了这个http://jsfiddle.net/1Lngmtz7/,但它不适用于条形图。

var ctx = document.getElementById("myChart").getContext("2d");
    var myRadarChart = new Chart(ctx, {
        type: 'radar',
        data: data
    })

    $('#myChart').click(function (e) {
        var helpers = Chart.helpers;

        var eventPosition = helpers.getRelativePosition(e, myRadarChart.chart);
        var mouseX = eventPosition.x;
        var mouseY = eventPosition.y;

        var activePoints = [];
        helpers.each(myRadarChart.scale.ticks, function (label, index) {
            for (var i = this.getValueCount() - 1; i >= 0; i--) {
                var pointLabelPosition = this.getPointPosition(i, this.getDistanceFromCenterForValue(this.options.reverse ? this.min : this.max) + 5);

                var pointLabelFontSize = helpers.getValueOrDefault(this.options.pointLabels.fontSize, Chart.defaults.global.defaultFontSize);
                var pointLabeFontStyle = helpers.getValueOrDefault(this.options.pointLabels.fontStyle, Chart.defaults.global.defaultFontStyle);
                var pointLabeFontFamily = helpers.getValueOrDefault(this.options.pointLabels.fontFamily, Chart.defaults.global.defaultFontFamily);
                var pointLabeFont = helpers.fontString(pointLabelFontSize, pointLabeFontStyle, pointLabeFontFamily);
                ctx.font = pointLabeFont;

                var labelsCount = this.pointLabels.length,
                    halfLabelsCount = this.pointLabels.length / 2,
                    quarterLabelsCount = halfLabelsCount / 2,
                    upperHalf = (i < quarterLabelsCount || i > labelsCount - quarterLabelsCount),
                    exactQuarter = (i === quarterLabelsCount || i === labelsCount - quarterLabelsCount);
                var width = ctx.measureText(this.pointLabels[i]).width;
                var height = pointLabelFontSize;

                var x, y;

                if (i === 0 || i === halfLabelsCount)
                    x = pointLabelPosition.x - width / 2;
                else if (i < halfLabelsCount)
                    x = pointLabelPosition.x;
                else
                    x = pointLabelPosition.x - width;

                if (exactQuarter)
                    y = pointLabelPosition.y - height / 2;
                else if (upperHalf)
                    y = pointLabelPosition.y - height;
                else
                    y = pointLabelPosition.y

                if ((mouseY >= y && mouseY <= y + height) && (mouseX >= x && mouseX <= x + width))
                    activePoints.push({ index: i, label: this.pointLabels[i] });
            }
        }, myRadarChart.scale);

        var firstPoint = activePoints[0];
        if (firstPoint !== undefined) {
            alert(firstPoint.index + ': ' + firstPoint.label);
        }
    });

感谢您的回应。

Nivelety

我用解决问题

document.getElementById("chart").onclick = function(e) 
{
    var activeElement = weatherMainChart.lastTooltipActive;
    console.log(activeElement[0]._index);
};

此解决方案注册图表和标签上的点击,然后我将其限制为e.layerY以仅注册标签部分上的点击。

document.getElementById("chart").onclick = function(e) 
{
    var activeElement = weatherMainChart.lastTooltipActive;
    if(e.layerY > 843 && e.layerY < 866 && activeElement[0] !== undefined)
        console.log(activeElement[0]._index);
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Chart.js:条形图单击事件

来自分类Dev

如何使用Chart.js将标签方块添加到条形图

来自分类Dev

使用chart.js的水平堆积条形图

来自分类Dev

Chart.js设置条形图的最大条形大小

来自分类Dev

Chart.js条形图:网格颜色和隐藏标签

来自分类Dev

在Chart.js中设置条形图的yAxis标签的格式

来自分类Dev

无法在React Js中使用Chart js中获得条形图颜色

来自分类Dev

Chart.js v2.0:堆积条形图

来自分类Dev

实时更新chart.js条形图

来自分类Dev

chart.js条形图基于值的颜色变化

来自分类Dev

angular-chart.js中的水平条形图

来自分类Dev

Chart.js堆叠和分组的条形图

来自分类Dev

如何更改Chart.js水平条形图宽度?

来自分类Dev

如何使Chart.js条形图留在原处

来自分类Dev

Chart.js:条形图多种颜色

来自分类Dev

Chart.js条形图的奇怪问题,图像分散

来自分类Dev

基于Label的Chart.js条形图加载数据

来自分类Dev

设置chart.js条形图的最大值

来自分类Dev

工具提示弄乱了 Chart.js 中的条形图

来自分类Dev

使用 chart.js 和关联数组生成条形图

来自分类Dev

使用Google Chart API为堆叠的条形图着色

来自分类Dev

在chart.js中,如果从移动设备访问,是否可以隐藏条形图的x轴标签/文本?

来自分类Dev

Ng2-chart条形图

来自分类Dev

将Chart JS 2上的条形图扩展为一种新型的Chart

来自分类Dev

仅2点的条形图(chart.js)不显示条形之一

来自分类Dev

Chart.js:如何使x轴标签显示在条形图中的条形上方

来自分类Dev

条形图未与Chart.js一起出现

来自分类Dev

在Chart.js上创建水平条形图扩展

来自分类Dev

Chart.js水平折线图或修改后的水平条形图

Related 相关文章

热门标签

归档