首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chart.js:更改工具提示模板

Chart.js:更改工具提示模板
EN

Stack Overflow用户
提问于 2015-05-28 16:02:29
回答 2查看 49.2K关注 0票数 10

我需要更改Chart.js工具提示模板,以便只有值部分以粗体显示。有一个tooltipTemplate选项,它应该可以做到这一点。此选项的默认值为:

代码语言:javascript
复制
tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= value %>%"

我试着这样编辑它:

代码语言:javascript
复制
tooltipTemplate: "<%if (label){%><%=label%>: <%}%><strong><%= value %></strong>%"

但它在屏幕上将strong标记显示为文本的一部分,而不是呈现粗体文本。我尝试在<%%>之间移动它们,但仍然不起作用。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-28 18:59:26

模板无法识别HTML。您必须使用customTooltips选项。下面是一个改编自(但未优化) https://github.com/nnnick/Chart.js/blob/master/samples/line-customTooltips.html的示例

HTML

代码语言:javascript
复制
<canvas id="myChart" width="400" height="200"></canvas>
<div id="chartjs-tooltip"></div>

CSS

代码语言:javascript
复制
#chartjs-tooltip {
     opacity: 0;
     position: absolute;
     background: rgba(0, 0, 0, .7);
     color: white;
     padding: 3px;
     border-radius: 3px;
     -webkit-transition: all .1s ease;
     transition: all .1s ease;
     pointer-events: none;
     -webkit-transform: translate(-50%, 0);
     transform: translate(-50%, 0);
 }

JS

代码语言:javascript
复制
var ctx = $("#myChart").get(0).getContext("2d");

var data = {
    labels: ["January", "February", "March", "April", "May", "June", "July"],
    datasets: [{
        label: "My First dataset",
        fillColor: "rgba(220,220,220,0.2)",
        strokeColor: "rgba(220,220,220,1)",
        pointColor: "rgba(220,220,220,1)",
        pointStrokeColor: "#fff",
        pointHighlightFill: "#fff",
        pointHighlightStroke: "rgba(220,220,220,1)",
        data: [65, 59, 80, 81, 56, 55, 40]
    }]
};

var myLineChart = new Chart(ctx).Line(data, {
    customTooltips: function (tooltip) {
        var tooltipEl = $('#chartjs-tooltip');

        if (!tooltip) {
            tooltipEl.css({
                opacity: 0
            });
            return;
        }

        tooltipEl.removeClass('above below');
        tooltipEl.addClass(tooltip.yAlign);

        // split out the label and value and make your own tooltip here
        var parts = tooltip.text.split(":");
        var innerHtml = '<span>' + parts[0].trim() + '</span> : <span><b>' + parts[1].trim() + '</b></span>';
        tooltipEl.html(innerHtml);

        tooltipEl.css({
            opacity: 1,
            left: tooltip.chart.canvas.offsetLeft + tooltip.x + 'px',
            top: tooltip.chart.canvas.offsetTop + tooltip.y + 'px',
            fontFamily: tooltip.fontFamily,
            fontSize: tooltip.fontSize,
            fontStyle: tooltip.fontStyle,
        });
    }
});

小提琴- http://jsfiddle.net/6rxdo0c0/1/

票数 14
EN

Stack Overflow用户

发布于 2019-01-22 12:11:08

我有一个最新的答案,使用jquery和bootstrap 4工具提示动态创建工具提示div。假设您的html是

代码语言:javascript
复制
<canvas id="myPieChart" width="100" height="55"></canvas>

然后使用以下脚本:

代码语言:javascript
复制
<script>  
    $(document).ready(function() {   

        let canvas = $("#donutChart")[0];
        let ctx = canvas.getContext("2d");

        let donutChart = new Chart(ctx, {
            type: 'doughnut',
            data: data,
            options: {

                tooltips: {

                    callbacks: {
                        title: function(){
                            return null;
                        },
                        label: function(tooltipItem, data) {
                            var multiline = ['First Line', 'second line'];
                            return multiline;
                        },

                    },
                    enabled: false, // the builtin tooltips cannot extend beyond the canvas

                    custom: function(tooltip) {

                        var tooltipEl = $('#chartjs-tooltip');

                        if(tooltipEl.length == 0) { // if not exists, create it
                            tooltipEl = $('<div class="tooltip fade" id="chartjs-tooltip"></div>').appendTo('body');
                        }

                        if ( !tooltip.body ) { // Hide if no tooltip
                            tooltipEl.remove();
                            return;
                        }


                        tooltipEl.removeClass('bs-tooltip-top bs-tooltip-bottom');
                        tooltipEl.addClass( 'bs-tooltip-' + (tooltip.yAlign == "bottom" ? "top" : "bottom") ); // different naming in bootstrap

                        var innerHtml = '<div class="arrow" style="left: '+tooltip.caretX+'px;"></div>'
                            + '<div class="tooltip-inner" style="max-width: none;">' + tooltip.body[0].join('<br>')
                            + '</div>';
                        tooltipEl.html( innerHtml );
                        tooltipEl.css( {
                            opacity: 1,
                            left: $("#donutChart").offset().left + tooltip.x + 'px',
                            top: $("#donutChart").offset().top + tooltip.y + 'px'
                        } );

                    },
                },
                hover: { 
                    mode: null,
                },
            }
        });
    });
</script>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30500601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档