【问题标题】:How to position highcharts tooltip above chart with outside:true如何将highcharts工具提示定位在图表上方,外部:true
【发布时间】:2021-01-15 00:51:53
【问题描述】:

我有一个系统,里面有很多高图表,基本上可以定位在页面的任何位置。 有些非常小(例如 50px x 50px)。 我知道我们可以设置tooltip.outside : true

tooltip: {
    outside: true
}

这会阻止工具提示通过将其从图表中分离出来并进入窗口来接管整个图表容器。 但是,当您靠近页面边缘时,这可能会导致窗口溢出问题,我个人更喜欢静态工具提示。

我希望始终将工具提示固定在图表上方,左上角有一点填充,这对于我的应用程序来说几乎总是可见的,并且可以避免溢出问题,例如;

我已经研究过设置custom positioner,但是,由于“外部”工具提示现在是窗口的一部分而不是相对于图表,定位器设置了一个固定位置,这不适合我的应用程序. 无论鼠标或滚动位置如何,我都希望工具提示始终位于图表上方。

当然,我可以自己添加一个自定义元素并将其放置在图表上方,然后将工具提示应用于该元素,但是我们有很多图表,这似乎很麻烦。

Tooltip outside Fiddle

建议? 谢谢

【问题讨论】:

    标签: highcharts


    【解决方案1】:

    在 highstock Tooltip.prototype.getPosition 代码中摸索了一下之后,我发现我需要的是 this.point.chart.pointer.getChartPosition();

            tooltip: {
                distance: 40,
                outside: true,
                positioner: function () {
                    var point = this;
                    var chart = point.chart;
                    var chartPosition = chart.pointer.getChartPosition();
                    var distance = point.distance;
    
                    //Position relative to renderTo container
                    return {
                        x: chartPosition.left - distance,
                        y: chartPosition.top - distance - (point.options.useHTML == true ? point.label.div.offsetHeight : point.label.height)
                    }
    
                    //Alternatively - Position relative to chart plot (ignoring legend)
                    var containerScaling = chart.containerScaling;
                    var scaleX = function (val) {
                        return (containerScaling ? val * containerScaling.scaleX : val);
                    };
                    var scaleY = function (val) {
                        return (containerScaling ? val * containerScaling.scaleY : val);
                    };
    
                    return {
                        x: chartPosition.left - distance + scaleX(chart.plotLeft),
                        y: chartPosition.top - distance + scaleY(chart.plotTop) - point.label.height
                    }
                },
            },
    

    See working fiddle.

    我觉得这个方法附加到指针上很奇怪,但这是我所追求的。

    需要注意的一点,在小提琴中我使用point.label.height, if useHTML:true;使用 point.label.div.height。

    【讨论】:

      【解决方案2】:

      如果不设置 'outside' 选项而使用 positioner 回调呢?它将在图表区域内设置想要的位置。

      演示:https://jsfiddle.net/BlackLabel/gabjwd2e/

      API:https://api.highcharts.com/highcharts/tooltip.positioner

      【讨论】:

      • 您好,感谢您的回复。问题是当图表非常小时(即小于工具提示本身),这就是我转向“外部”选项的原因。但是将工具提示定位在图表之外的一致位置是问题所在。
      • 那么,您是否考虑过将工具提示定义为出色的 HTML 元素并将该元素定位在您想要的任何位置?您可以通过将useHTML 设置为 true 来实现:api.highcharts.com/highcharts/tooltip.useHTML
      • 是的,我很感激我们可以做到这一点,但我们有很多图表,其中包含很多不同的场景(样式/布局)。这样做感觉有点麻烦和麻烦,这就是为什么我希望有更好的解决方案,最好使用定位器或其他图表设置组合。
      • 你能在我可以处理的一些在线编辑器上重现这个案例吗?没有它,我只能尝试猜测解决方案......
      • 当然,看到这个小提琴,它本质上显示了定位器将其放在容器左上角的问题,而不是图表容器; jsfiddle.net/mattscotty/4fchgpdr/2
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多