Javascript 海图。如何相对于标签中的文本动态设置记号和显示标签?

Javascript 海图。如何相对于标签中的文本动态设置记号和显示标签?,javascript,highcharts,Javascript,Highcharts,我通过滴答定位器动态设置滴答声,并通过labels.formatter动态设置标签。由于屏幕宽度较窄,我需要显示较少的刻度和标签,以便所有内容都适合 我想知道标签的宽度。这样我就可以计算阶跃 Highcharts.chart('container'{ 图表:{ 活动:{ render(){ var ticks=this.xAxis[0]。ticks, ticksPositions=this.xAxis[0]。ticksPositions, 滴答声, 滴答声, getPosition=函数(勾选

我通过滴答定位器动态设置滴答声,并通过labels.formatter动态设置标签。由于屏幕宽度较窄,我需要显示较少的刻度和标签,以便所有内容都适合

我想知道标签的宽度。这样我就可以计算阶跃

Highcharts.chart('container'{
图表:{
活动:{
render(){
var ticks=this.xAxis[0]。ticks,
ticksPositions=this.xAxis[0]。ticksPositions,
滴答声,
滴答声,
getPosition=函数(勾选){
变量轴=刻度轴;
返回Highcharts.Tick.prototype.getPosition.call(Tick,axis.horiz,Tick.pos,axis.tickmarkOffset);
};
tick0x=getPosition(ticks[ticksPositions[0]]).x;
tick1x=getPosition(ticks[ticksPositions[1]]).x;
this.xAxis[0].labelGroup.translate((tick1x-tick0x)/12)
}
}
},
xAxis:{
分:0,,
最高:20,
定位器:功能(){
var头寸=[],
勾选=数学地板(this.dataMin),
增量=Math.ceil((this.dataMax-this.dataMin)/6);
if(this.dataMax!==null&&this.dataMin!==null){

对于(tick;tick-increment,这里是一个如何获取标签宽度的示例,您可以在计算中使用该宽度

if(this.ticks[tick]) {
  console.log(this.ticks[tick].label.getBBox().width)
}

演示:

我认为更好的解决方案是:

  • 获取最宽的标签宽度
  • 将轴宽度除以上述标签宽度
  • 使用上面的地板输出在轴上进行更新

    function(chart){
    let xAxis = chart.xAxis[0],
        labelWidth = xAxis.ticks[10].label.getBBox().width, // I choose tick 10 
        because is more wide
        axisWidth = xAxis.width,
        tickAmount = axisWidth / labelWidth;
    
        xAxis.update({
            tickAmount: tickAmount
        });
    }
    
  • 演示:
    API:

    我在本地调用了一次tickPositioner,但在您的示例中调用了两次。Ticks对象为空。我无法在JSFIDLE上重复。Ticks对象为空,原因是:1.图表宽度和高度以百分比表示。2.启用了styledMode选项。因此,以下条件不起作用:实际上是什么给了您标签l宽度?在tickPositioner中,您只能渲染一个将显示的刻度数组-您无法操纵刻度之间的距离您是对的,但我可以使用刻度形成一个关于标签宽度的数组。假设我有20个标签。我取轴的宽度,然后除以标签的最大宽度。因此我得到t保证适合轴的标签数量。根据该数量,您可以确定刻度的数量。启用labels.useHTML选项时,这不起作用。当此解决方案不起作用时,您是否能够重现这种情况?对我来说,输出与useHTML选项相同。