【问题标题】:flot chart hoverable markings浮动图表可悬停标记
【发布时间】:2016-12-20 09:29:31
【问题描述】:

我制作了一些图表,可能会在其中放置一个标记,但我不明白如何使标记与 y 轴值一起悬停。

$.plot($("#flot-chart-@ControlID"), series_@ControlID, {
        series: {
            lines: {
                lineWidth: 2,
                fill: @((Model.Series.Count() == 1).ToString().ToLower()),
            },
            bars: {
                barWidth: 0.6,
                align: "center"
            },
            points: {
                fill: @((Model.Series.Count() == 1).ToString().ToLower()),
            }
        },
        xaxis: {
            ticks: xlabels_@ControlID,
            tickDecimals: 0
        },
        colors: @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.Series.Select(o => o.Color).ToArray())),
        grid: {
            color: "#999999",
            hoverable: true,
            clickable: true,
            borderWidth: 0,
            @if (Model.LimitLine != null)
            {
                <text>
                    markings: [
                        { color: '#000', lineWidth: 1, yaxis: { from: @Model.LimitLine, to: @Model.LimitLine }},
                    ]
                </text>
            }
            },
        legend: {
            show: true
        },
        tooltip: true,
        tooltipOpts: {
            content: function(label, xval, yval) {
                var content = getLabel_@(ControlID)(xval) + ": " + yval;
                return content;
            },
        }
    });

如何显示带有值的工具提示?
图表示例:

【问题讨论】:

    标签: javascript jquery html charts flot


    【解决方案1】:

    您无法使用工具提示插件来做到这一点,但您可以自己制作工具提示。像这样的:

    $("#placeholder").bind("plothover", function (event, pos, item) {
        if (item) { // hovering over a datapoint
            var x = item.datapoint[0].toFixed(2),
                y = item.datapoint[1].toFixed(2);
    
            $("#tooltip").html(item.series.label + " of " + x + " = " + y)
                .css({top: item.pageY+5, left: item.pageX+5}).fadeIn(200);
        } else {
            var hideTooltip = true;
    
            // you need to save the Flot object for this (here as "plot")
            $.each(plot.getOptions().grid.markings, function(idx, marking) {
                if (Math.abs(pos.y - marking.yaxis.to) < 10) {
                    $("#tooltip").html("Limit: " + marking.yaxis.to)
                        .css({top: pos.pageY + 5, left: pos.pageX + 5}).fadeIn(200);
                    hideTooltip = false;
                    return false;
                }
            });
    
            if (hideTooltip) {
                $("#tooltip").hide();
            }
        }       
    });
    

    基于此example

    【讨论】:

    • 如果item 为null、false 或未定义,您应该如何访问pageYpageX 属性?
    • 其实解决办法差不多了。您应该访问pos.pageXpos.pageY,而不是item.pageXitem.pageY。此外,您可能需要根据您的 x 轴比例调整阈值(硬编码的“10”)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2021-12-13
    • 2012-11-03
    相关资源
    最近更新 更多