Я создаю приложение, используя библиотеку упрощенных диаграмм. Я хочу иметь плавную загрузку исторических данных, как в 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
Как плавно загрузить исторические данные? ⇐ Javascript
Форум по Javascript
1760694529
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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79792939/how-to-load-historical-data-smoothly[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия