Компонент Measurer
Визуальный компонент, позволяющий пользователю интерактивно выделять интересующую область графика.
Компонент measurer применяется только в графиках, работающих с offline-типами данных
Объявление компонента measurer
{
"name": "measurer",
"sector": "central",
"layerZ": -1,
"settings": {
"cursors": [{...}, {...}]
}
}
| Свойство | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
sector |
string | "central" | Сектор, в котором будет распологаться компонент measurer. |
layerZ |
number | -1 | Определяет положение компонента по оси Z. Перекрывающие элементы с большим значением layerZ будут накладываться поверх элементов с меньшим layerZ. |
settings.cursors |
Array<Object> | ОТСУТСТВУЕТ | Содержит определения и настройки измерителей, отображаемых на графике. |
Настройки
Свойство mode определяет вид отображаемого измерителя. На данный момент компонент measurer поддерживает два вида измерителей:
Вид single
Вид single использулетя по-умолчанию. Измеритель отображается в виде курсора, позволяющего зафиксировать значение в конкретной точке графика.
{
"settings": {
"cursors": [
{
"mode": "single",
"name": "",
"startPosition": 0,
"touchLineAreaWidth": 8,
"lineWidth": 1,
"minSpaceToAnother": 1,
"focusedAreaColor": "#28bbff",
"lineColor": "#3d64ae",
"label": {
"title": "",
"color": "#3d64ae",
"fontFamily": "Roboto",
"fontSize": "16px",
"stroke": "#ffffff",
"strokeWidth": "0.4",
"isBold": false
},
}
]
}
}
| Свойство | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
mode |
string | "single" | Вид отображаемого измерителя. |
name |
string | ОТСУТСТВУЕТ | Уникальное имя измерителя. Используется для идентификации и управления через контроллер. |
startPosition |
number | 0 | Начальная позиция измерителя в пикселях при инициализации графика. |
touchLineAreaWidth |
number | 8 | Ширина интерактивной области измерителя в пикселях. |
lineWidth |
number | 1 | Толщина измерителя в пикселях. |
minSpaceToAnother |
number | 1 | Минимальное расстояние между измерителями в пикселях. |
focusedAreaColor |
string | #28BBFF | Цвет интерактивной области во время взаимодействия в формате RGBA или HEXA. |
lineColor |
string | #3B64AE | Цвет измерителя в формате RGBA или HEXA. |
label.title |
string | "" | Текст подписи, отображаемой на графике рядом с измерителем. |
label.color |
string | #3B64AE | Цвет текста подписи измерителя в формате RGBA или HEXA. |
label.fontFamily |
string | "Roboto" | Шрифт подписи. |
label.fontSize |
string | "16px" | Размер шрифта. |
label.stroke |
string | ОТСУТСТВУЕТ | Цвет обводки текста подписи в формате RGBA или HEXA. |
label.strokeWidth |
string | ОТСУТСТВУЕТ | Толщина обводки текста в пикселях. |
label.isBold |
string | ОТСУТСТВУЕТ | Жирность шрифта. |
Вид double
Измеритель с режимом double отображается как область между двумя границами. Пользователь может изменять как положение всей области, так и её ширину. Такой тип измерителя удобно использовать для выделения интервалов на графике.
{
"settings": {
"cursors": [
{
"mode": "double",
"name": "",
"startPosition": 0,
"startWidth": 200,
"leftLineColor": "#3d64ae",
"rightLineColor": "#3d64ae",
"focusedAreaColor": "#28bbff",
"intermediateAreaColor": "#00a3d540",
"intermediateAreaOpacity": "-",
"touchLineAreaWidth": 8,
"minLinesSpace": 10,
"minSpaceToAnother": 1,
"rounded": false,
"label": {
"title": "",
"color": "#3d64ae",
"fontFamily": "Roboto",
"fontSize": "16px",
"stroke": "#ffffff",
"strokeWidth": "0.4",
"isBold": false
},
}
]
}
}
| Свойство | Тип | Значение поумолчанию | Описание |
|---|---|---|---|
mode |
string | "single" | Вид отображаемого измерителя. |
name |
string | ОТСУТСТВУЕТ | Уникальное имя измерителя. Используется для идентификации и управления через контроллер. |
startPosition |
number | 0 | Начальная позиция измерителя в пикселях при инициализации графика. |
startWidth |
number | 200 | Начальная ширина измерителя в пикселях при инициализации графика. |
leftLineColor |
string | #3D64AE | Цвет левой границы измерителя в формате RGBA или HEXA. |
rightLineColor |
string | #3D64AE | Цвет правой границы измерителя в формате RGBA или HEXA. |
focusedAreaColor |
string | #28BBFF | Цвет интерактивной области во время взаимодействия в формате RGBA или HEXA. |
intermediateAreaColor |
string | #00A3D540 | Цвет области между границами измерителя в формате RGBA или HEXA. |
intermediateAreaOpacity |
number | ОТСУТСТВУЕТ | Прозрачность промежуточной области между границами (от 0 до 1). |
touchLineAreaWidth |
number | 8 | Ширина интерактивной области измерителя в пикселях. |
minLinesSpace |
number | 10 | Минимальное расстояние между левой и правой границами измерителя в пикселях. |
minSpaceToAnother |
number | 1 | Минимальное расстояние между измерителями в пикселях. |
rounded |
boolean | false | Флаг скругления углов у измерителя. |
label.title |
string | "" | Текст подписи, отображаемой на графике рядом с измерителем. |
label.color |
string | #3B64AE | Цвет текста подписи измерителя в формате RGBA или HEXA. |
label.fontFamily |
string | "Roboto" | Шрифт подписи. |
label.fontSize |
string | "16px" | Размер шрифта. |
label.stroke |
string | ОТСУТСТВУЕТ | Цвет обводки текста подписи в формате RGBA или HEXA. |
label.strokeWidth |
string | ОТСУТСТВУЕТ | Толщина обводки текста в пикселях. |
label.isBold |
string | ОТСУТСТВУЕТ | Жирность шрифта. |
Контроллер
Доступ к измерителям возможно получить через их контроллер.
import { JagmRootProvider } from "@incartdev/jagm-core";
import { JagmRawLineSignalData, JagmRawSignalsChartProvider } from "@incartdev/jagm-chart";
import { RawOfflineVisualizatorConfigJsUnpacker } from "@incartdev/jagm-visualizator";
import VisualConfig from "./VisualConfig.json";
// Получение ссылок на DOM элементы контейнера
const canvasRef = document.querySelector(".canvas-wrap");
// Создание экземпляра класса-конструктора графического полотна
const visProvider = new JagmRootProvider(new RawOfflineVisualizatorConfigJsUnpacker());
// Инициализация создания графических элементов
await visProvider.create({
settings: VisualConfig,
rootHtml: canvasRef
});
// Создание контроллера графических элементов библиотеки
const chartProvider = new JagmRawSignalsChartProvider(visProvider.builder);
// Получение контроллера компонента measurer (для одного графика)
const measurerGroup = chartProvider.charts[0].findContentGroup("measurer");
API Контроллера
| Свойство | Тип | Описание |
|---|---|---|
findByName(name: string) |
Функция | Возвращает объект измерителя, если объект с указыннм именем существует. |
Прогрмаммное взаимодействие с компонентом
Объект измерителя предоставляет интерфейс для програмнного управленя и взаимодействия с компонентом.
| Свойство | Тип | Описание |
|---|---|---|
move(args) |
Функция | Перемещает измеритель на указанную позицию в пикселях. |
moveWithoutEvent(args) |
Функция | Перемещает измеритель на указанную позицию в пикселях. При перемещении |
addEventListener(eventName: string, callback: (...args) => Promise<void>) |
Функция | Регистрирует обработчик, вызываемый при возникновении указанного события. |
disableEvent(eventName: string) |
Функция | Отключает все обработчики, привязанные к заданному событию. |
enableEvent(eventName: string) |
Функция | Повторно включает ранее отключённые обработчики события. |
disableListener(eventName: string, callback: (...args) => Promise<void>) |
Функция | Отключает конкретный обработчик события. |
enableListener(eventName: string, callback: (...args) => Promise<void>) |
Функция | Повторно включает конкретный обработчик события. |
handleEvent(eventName: string, data?: unknown) |
Функция | Программно инициирует событие с опциональными данными. |
Интерфейс измерителей имеет общую структуру для обоих режимов — single и double, однако поведение некоторых методов может отличаться в зависимости от выбранного режима.
Метод move(...)
Метод move используется для изменения положения измерителя на графике. Его сигнатура зависит от типа измерителя:
singlemove(x: number): voiddoublemove({ leftLinePosition?: number, rightLinePosition?: number }): void
Измеритель не может быть перемещён за пределы графического полотна. При наличии нескольких измерителей на графике также действует ограничение: измерители не могут пересекаться — перемещение ограничено положениями соседних
Метод moveWithoutEvent(...)
Метод moveWithoutEvent используется для изменения положения измерителя на графике без инициализации события. Его сигнатура зависит от типа измерителя:
singlemoveWithoutEvent(x: number): voiddoublemoveWithoutEvent({ leftLinePosition?: number, rightLinePosition?: number }): void
Измеритель не может быть перемещён за пределы графического полотна. При наличии нескольких измерителей на графике также действует ограничение: измерители не могут пересекаться — перемещение ограничено положениями соседних
Обработка событий
Подерживаемые события:
| Событие | Описание |
|---|---|
| PositionChanged | Возникает при изменении позиции измерителя. |
Событие PositionChanged срабатывает при каждом перемещении измерителя и передаёт слушателям объект с информацией о типе сдвинутой линии и её новой позиции.
const target: MeasurerCallback = {
lineType: "center", // или "left", "right" в зависимости от режима
position: x, // число в режиме single, объект { x, width } в режиме double
};
-
В режиме
singleвсегда передаётся lineType: "center" и position, представляющий координату x.Код примера
-
В режиме
doubleполе lineType принимает значения "left", "right" или "center" в зависимости от перемещённой границы, а position содержит объект { x, width }.Код примера
Примеры
single
Код примера
double
Код примера
Доступ к содержимому по ссылке возможен только для авторизованных пользователей GitHub, являющихся участниками организации IncartDev
Ссылка на ресурс
Доступ к содержимому по ссылке возможен только для авторизованных пользователей GitHub, являющихся участниками организации IncartDev
Ссылка на ресурс
Доступ к содержимому по ссылке возможен только для авторизованных пользователей GitHub, являющихся участниками организации IncartDev
Ссылка на ресурс
Доступ к содержимому по ссылке возможен только для авторизованных пользователей GitHub, являющихся участниками организации IncartDev
Ссылка на ресурс