Skip to content

Утилиты

PositionManager

Внутреннее дерево отрезков, предоставленное для продвинутых сценариев использования. Хранит высоты строк и отвечает на запросы префиксных сумм за O(log n).

ts
import { PositionManager } from 'vue-virtual-scroller-kit'

const manager = new PositionManager(
  10_000, // число элементов
  50, // единая оценочная высота (либо функция (index) => number)
)

manager.totalSize // общая высота всех элементов
manager.getOffset(index) // пиксельное смещение элемента i = сумма heights[0..i-1]
manager.getHeight(index) // сохранённая высота элемента i
manager.findIndex(scrollTop) // индекс первого элемента, видимого при scrollTop
manager.set(index, height) // обновить измеренную высоту, O(log n)

Используйте PositionManager при построении полностью кастомных виртуализированных раскладок, не подходящих под предоставленные компоненты.

autoColWidths

Утилитарная функция, оценивающая ширины столбцов по образцу данных с помощью measureText Canvas API. Полезна для установки начальных значений ColumnDef.width в VirtualTable на основе реального содержимого.

ts
import { autoColWidths } from 'vue-virtual-scroller-kit'

const widths = autoColWidths(columns, rows, options)

Параметры

ПараметрТипОписание
cols{ key: string; title: string }[]Определения столбцов — ключ и заголовок
rowsT[]Строки данных для измерения
optionsAutoColWidthsOptionsОпциональные настройки (см. ниже)

AutoColWidthsOptions

ОпцияТипПо умолчаниюОписание
fontstring'12px sans-serif'Строка CSS-шрифта — должна соответствовать шрифту ячеек
paddingnumber24Дополнительные px, добавляемые к измеренной ширине (учитывает отступы ячейки)
minWidthnumber60Минимальная ширина столбца в px
maxWidthnumber320Максимальная ширина столбца в px

Возвращаемое значение

Map<string, number> — сопоставляет каждый ключ столбца с шириной в пикселях.

Пример

ts
import { autoColWidths } from 'vue-virtual-scroller-kit'
import type { ColumnDef } from 'vue-virtual-scroller-kit'

const rawCols = [
  { key: 'id', title: 'ID' },
  { key: 'name', title: 'Name' },
  { key: 'email', title: 'Email' },
]

const widths = autoColWidths(rawCols, rows, {
  font: '12px Inter, sans-serif',
  padding: 24,
  maxWidth: 400,
})

const columns: ColumnDef[] = rawCols.map((c) => ({
  key: c.key,
  title: c.title,
  width: widths.get(c.key) ?? 120,
  minWidth: 60,
}))

Примечание про SSR: autoColWidths внутри использует document.createElement('canvas'). В SSR-окружениях, где document недоступен, функция откатывается к единой ширине 120px.