【问题标题】:Chart.js show tooltips on page loadChart.js 在页面加载时显示工具提示
【发布时间】:2015-02-25 13:49:52
【问题描述】:

我正在使用http://www.chartjs.org/ 显示饼图,但似乎无法弄清楚如何在页面加载时显示工具提示。

$(document).on('ready page:load', function() {

    Chart.defaults.global.tooltipEvents = ['click', 'mousemove', 'window.onload'];
    Chart.defaults.global.customTooltips = function(tooltip) {
        var text = tooltip.text;
        var tooltipEl = $('#chartjs-tooltip');

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

        if(text) {
            var id = text.split(":")[0].replace(/ /g, '-').toLowerCase();
            $('.tip-text').addClass('hide');
            $('#'+id+'-tip').removeClass('hide').show();
        }

        // Set caret Position
        tooltipEl.removeClass('above below');
        tooltipEl.addClass(tooltip.yAlign);
        // Set Text
        tooltipEl.html(tooltip.text.split(":")[0]);
        // Find Y Location on page
        var top;
        if (tooltip.yAlign == 'above') {
            top = tooltip.y - tooltip.caretHeight - tooltip.caretPadding;
        } else {
            top = tooltip.y + tooltip.caretHeight + tooltip.caretPadding;
        }
        // Display, position, and set styles for font
        tooltipEl.css({
            opacity: 1,
            left: tooltip.chart.canvas.offsetLeft + tooltip.x + 'px',
            top: tooltip.chart.canvas.offsetTop + top + 'px',
            fontFamily: tooltip.fontFamily,
            fontSize: tooltip.fontSize,
            fontStyle: tooltip.fontStyle,
        });
    }

    var body = $('body');

    if(body.is(".home")) {
        var ctx1 = $("#custom-research-chart").get(0).getContext("2d");
        var data = [
            {
                value: 250,
                color:"#7ad3f7",
                highlight: "#7ad3f7",
                label: "GROWTH OVER TIME",
                labelColor: "white",
                labelFontSize: "16"
            },
            {
                value: 250,
                color:"#9e062e",
                highlight: "#9e062e",
                label: "INNOVATION",
                labelColor: "white",
                labelFontSize: "16"
            },
            {
                value: 250,
                color:"#577e7e",
                highlight: "#577e7e",
                label: "DEVELOPMENT",
                labelColor: "white",
                labelFontSize: "16"
            },
            {
                value: 250,
                color:"#f28d1e",
                highlight: "#f28d1e",
                label: "MARKET RESEARCH",
                labelColor: "white",
                labelFontSize: "16"
            },
        ];
        var customResearch = new Chart(ctx1).Doughnut(data);

        $('.various').fancybox({
            maxWidth    : 800,
            maxHeight   : 600,
            width       : '70%',
            height      : '70%',
            openEffect  : 'none'
        });

        $.force_appear();

        $(document.body).on('appear', '#alicia', function(e, $affected) {
            console.log("HEY")
        });
    }

});

【问题讨论】:

    标签: javascript chart.js


    【解决方案1】:

    一个快速的方法是关闭工具提示(这样当鼠标悬停在图表上时图表不会重绘)并关闭动画(这样图表不会再次从图表上擦除工具提示)重绘)。然后您可以手动调用图表的showTooltip 方法,将segments 传递给它。

    如果你想保留动画,你需要在动画结束时有一个监听器,但我似乎找不到任何关于该事件被触发的文档(它可能不存在)

    var data = [{
        value: 300,
        color: "#F7464A",
        highlight: "#FF5A5E",
        label: "Red"
    }, {
        value: 100,
        color: "#FDB45C",
        highlight: "#FFC870",
        label: "Yellow"
    }]
    
    
    //canvases
    var chart = document.getElementById("chart").getContext("2d");
    
    //charts
    var myChart = new Chart(chart).Doughnut(data, {
        animation:false,
        showTooltips: false,
    });
    myChart.showTooltip(myChart.segments);
    <script src="http://www.quincewebdesign.com/cdn/Chart.js"></script>
    <canvas id="chart"></canvas>

    这是一种快速的方法,因为它不能对工具提示的位置进行太多控制,而且如果您的饼图中有很多数据,它们可能会重叠。

    【讨论】:

    • 这很好用!您是否知道在标签所属的段上而不是在工具提示中实际显示工具提示内容的方法? @昆斯
    • 对不起,如果我真的找到了方法,我会告诉你的
    • 同时可以保留动画。看看这里:stackoverflow.com/questions/25661197/…
    • 啊,这就是我要找的东西。还以为是事件呢。是的,这是实现这一目标的最佳方式。
    • 这似乎不适用于折线图,它会抛出“Uncaught TypeError: Cannot read property 'length' of undefined”,但适用于饼图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    相关资源
    最近更新 更多