Как плавно загрузить исторические данные?Javascript

Форум по Javascript
Ответить
Anonymous
 Как плавно загрузить исторические данные?

Сообщение Anonymous »

Я создаю приложение, используя библиотеку упрощенных диаграмм. Я хочу иметь плавную загрузку исторических данных, как в Trading View. В настоящее время я использую метод setData , но диаграмма смещается при вызове метода setData . в приложении Trading View, если я прокручиваю, чтобы загрузить исторические данные, поведение графика становится плавным и не дрейфует. Как это реализовать?
function applyCandlesAndRestore(targetLogical) {
chartState.isApplyingView = true;
candleSeries.setData(candles);
// chart.timeScale().fitContent();

if (targetLogical) {
chart.timeScale().setVisibleLogicalRange(targetLogical);
} else if (chartState.logicalRange) {
chart.timeScale().setVisibleLogicalRange(chartState.logicalRange);
}

requestAnimationFrame(() => {
chartState.isApplyingView = false;
chartState.logicalRange = chart.timeScale().getVisibleLogicalRange();
});
}

function mergeCandles(existing, incoming) {
const merged = [...existing];
for (const candle of incoming) {
const idx = merged.findIndex(c => c.time === candle.time);
if (idx !== -1) {
merged[idx] = {
...merged[idx],
...candle,
close: (merged[idx].close + candle.close) / 2,
};
} else {
merged.push(candle);
}
}
return merged;
}

async function setWindowByIndex(start, end, targetLogical = null) {
if (start < 0) start = 0;
if (end < start) end = start;
if (chartState.sliceStartIdx === start && chartState.sliceEndIdx === end) return;

const out = await window.tradingAPI.getPriceDataSliceByIndex(start, end);
if (!out || out.length === 0) return;

if (candles.length === 0) {
candles = out;
} else {
candles = mergeCandles(candles, out);
if (candles.length > MAX_CANDLES) {
candles = candles.slice(0, MAX_CANDLES);
}
console.log('Merged candles, new length:', candles.length);
}

chartState.sliceStartIdx = start;
chartState.sliceEndIdx = end;
chartState.sliceCount = candles.length;
chartState.loadedStartTs = candles[0]?.time ?? null;
chartState.loadedEndTs = candles.at(-1)?.time ?? null;

applyCandlesAndRestore(targetLogical);
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... a-smoothly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»