如何在Highstock的自定义坐标上定位RangeSelector/zoom按钮

Jug*_*kar 5 highcharts highstock

我正在使用高档图表,并希望将变焦按钮(1米,2米等)移动到不同的位置.

我检查了他们的API,目前似乎没有选择这样做.此外,源代码表明这个位置是硬编码的,因此我认为我不能轻易地使用一些未记录的属性注入位置

Highstock来源

Highcharts.RangeSelector.prototype.render = function (min, max) {
...
rangeSelector.zoomText = renderer.text(lang.rangeSelectorZoom, plotLeft, chart.plotTop - 10)
                .css(options.labelStyle)
                .add();

// button starting position
buttonLeft = plotLeft + rangeSelector.zoomText.getBBox().width + 5;
...
}
Run Code Online (Sandbox Code Playgroud)

Jug*_*kar 8

这可以通过覆盖当前渲染方法然后在将实际渲染方法调用到所需位置后移动框来完成

var orgHighchartsRangeSelectorPrototypeRender = Highcharts.RangeSelector.prototype.render;
Highcharts.RangeSelector.prototype.render = function (min, max) {
    orgHighchartsRangeSelectorPrototypeRender.apply(this, [min, max]);
    var leftPosition = this.chart.plotLeft,
        topPosition = this.chart.plotTop+5,
        space = 2;
    this.zoomText.attr({
        x: leftPosition,
        y: topPosition + 15
    });
    leftPosition += this.zoomText.getBBox().width;
    for (var i = 0; i < this.buttons.length; i++) {
        this.buttons[i].attr({
            x: leftPosition,
            y: topPosition 
        });
        leftPosition += this.buttons[i].width + space;
    }
};
Run Code Online (Sandbox Code Playgroud)

需要在创建任何图表之前运行此代码

定位缩放按钮| Highchart&Highstock @ jsFiddle

  • 这是代码的一个分支,它不会混淆命名空间:http://jsfiddle.net/mkremer90/d8Lgv/我想这只是个人偏好,但这样做. (3认同)