Спасибо за ответ.
Вот полный код, который я использую для автоматической прокрутки графика:
if ( e.target.xAxis ) {
const extremes = e.target.xAxis[ 0 ].getExtremes();
const { userMax, userMin, oldMax, dataMax } = e.target.xAxis[ 0 ];
if ( extremes.userMax === oldMax && extremes.userMax < dataMax ) {
e.target.xAxis[ 0 ].setExtremes(
dataMax - ( userMax - userMin ),
dataMax
);
}
Может быть, мне нужно уточнить, как я храню и изменяю данные в избыточном формате. Все данные диаграммы, помещенные в массив:
[{
open(pin):1
high(pin):3
low(pin):1
close(pin):2
volume(pin):10
x(pin):1581850800000
}, ...
]
Поэтому, если мне нужно загрузить исторические данные с сервера, я просто добавляю данные в начало массива. В случае, если мне нужно добавить новую свечу на график, я просто добавляю новый элемент в конец массива. Компонент Chart получает новый рядный ряд посредством обновления приставки.
UPD:
Я наконец-то решил свою проблему со следующими логами c в событии перерисовки:
if ( dataMax - userMax < pointRange * 2 ) {
e.target.xAxis[ 0 ].setExtremes(
dataMax - ( userMax - userMin ),
dataMax,
false
);
}
Идея проверить, сколько свечей не видно пользователю, и если их больше 2, просто ничего не делайте, переместите график, чтобы показать последние свечи. false
в setExtremes необходимо избегать бесконечной перерисовки.