【问题标题】:Chart.js bar chart label gets hidden on hoverChart.js 条形图标签在悬停时隐藏
【发布时间】:2026-02-02 15:30:01
【问题描述】:

我有一个带有自定义弹出窗口的条形图,每个条形上都有一个标签。问题是当任何条悬停时,所有标签都会消失。 http://jsfiddle.net/s8yfqvdc/9/

我在文档中看不到任何对我有帮助的东西。

var context = document.getElementById('serviceLife').getContext('2d');

window.myObjBar2 = new Chart(context).Bar(barChartData2, {
    scaleOverride: true,
    scaleSteps: 10,
    scaleStepWidth: 10,
    scaleStartValue: 0,
    barShowStroke: false,
    barStrokeWidth: 0,
    barValueSpacing: 2,
    animation: false,
    responsive: true,
    tooltipTemplate: "<%if (label){%><%=label.tooltip%><%}%>",
    maintainAspectRatio: true,
    onAnimationComplete: function () {

        var ctx = this.chart.ctx;
        ctx.font = this.scale.font;
        ctx.fillStyle = this.scale.textColor
        ctx.textAlign = "center";
        ctx.textBaseline = "bottom";

        this.datasets.forEach(function (dataset) {
            dataset.bars.forEach(function (bar) {
                ctx.fillText(bar.value, bar.x, bar.y - 5);
            });
        })
    }
});

【问题讨论】:

标签: javascript jquery chart.js


【解决方案1】:

我花了一点时间解决了这个问题。

我从研究扩展中收集到的东西......

我将 onAnimationComplete 函数移到了 .extend:

Chart.types.Bar.extend({
    name: "BarAlt",
    draw: function () {
    Chart.types.Bar.prototype.draw.apply(this, arguments);
            var ctx = this.chart.ctx;
        ctx.font = this.scale.font;
        ctx.fillStyle = this.scale.textColor
        ctx.textAlign = "center";
        ctx.textBaseline = "bottom";

        this.datasets.forEach(function (dataset) {
            dataset.bars.forEach(function (bar) {
                ctx.fillText(bar.value, bar.x, bar.y - 5);
            });
        })
    }
});

http://jsfiddle.net/s8yfqvdc/10/

【讨论】:

    【解决方案2】:

    您可能需要创建一个简单的扩展,因为这似乎是 Chart.js 中的一个已知问题:see this answer

    【讨论】:

    • 你知道如何用条形图做到这一点吗?我真的不明白这个扩展在做什么。