Компонент 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 используется для изменения положения измерителя на графике. Его сигнатура зависит от типа измерителя:

  • single
    move(x: number): void
    
  • double
    move({ leftLinePosition?: number, rightLinePosition?: number }): void
    

Измеритель не может быть перемещён за пределы графического полотна. При наличии нескольких измерителей на графике также действует ограничение: измерители не могут пересекаться — перемещение ограничено положениями соседних

Метод moveWithoutEvent(...)

Метод moveWithoutEvent используется для изменения положения измерителя на графике без инициализации события. Его сигнатура зависит от типа измерителя:

  • single
    moveWithoutEvent(x: number): void
    
  • double
    moveWithoutEvent({ 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
Ссылка на ресурс

Предыдущая
Следующая