LeCodesdocs

Устройство

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

Обзор

TypeScript
if (device.platform === 'ios') toast('running on iOS')

const layout = (w: number, h: number) => {
  console.log('display is', w, 'x', h, 'logical px')
}
layout(device.width, device.height)               // читается в любой момент
device.addEventListener('resize', layout)         // и снова при каждом ресайзе

Инфо о платформе

TypeScript
device.platform     // "web" | "android" | "ios" | string  (только чтение)
device.language     // код языка хоста, напр. "en"          (только чтение)
device.pixelRatio   // физических px на логический px; 1 на обычных дисплеях, 2–3 на retina/iOS

pixelRatio — коэффициент, с которым запекать Canvas для чёткого вывода без хардкода: new Canvas(w, h, { pixelRatio: device.pixelRatio }). Откатывается к 1, если хост его не сообщает.

Note

веб-поверхность 2D/GL сейчас рендерит в логическом разрешении, поэтому на вебе pixelRatio помогает только UI-канвасам; на iOS (физическая поверхность) он делает 2D-канвасы чёткими.

Размер дисплея

TypeScript
device.width        // текущая ширина дисплея, логические px  (только чтение)
device.height       // текущая высота дисплея, логические px (только чтение)

Те же значения, что доставляет событие resize, но читаемые в любой момент — не только внутри слушателя. Оба — логические px (как clientX/clientY), никогда не физические пиксели.

Note

оба равны 0, пока хост не сообщил размер. Не строй layout из device.width в начале файла, который выполняется до первого кадра — подпишись ещё и на resize.

Событие resize

TypeScript
device.addEventListener('resize', (width, height) => { })   // логические px
device.removeEventListener('resize', callback)              // та же ссылка на функцию

Срабатывает при любом изменении вьюпорта хоста (поворот, ресайз окна). Единственный канал, который эмитит device; другие имена каналов игнорируются.

Точный тач

TypeScript
device.setPreciseTouch(enabled: boolean)    // ВЫКЛ по умолчанию

Подключи систему точного тача там, где платформа её поддерживает. Когда включено, быстрые штрихи сэмплируются на полной частоте дигитайзера (объединённые касания iOS, ≈120–240 Гц), а не раз в кадр дисплея (~60 Гц) — приложение с активным вводом (рисование, рукописный ввод, перетаскивание) получает больше точек и более гладкие линии. Для tap/кнопочных UI оставь выключенным.

Note

гейтится хостом — тихий no-op на хостах без понятия объединённого ввода (веб уже объединяет pointermove; headless).

Смотрите также