Устройство
Информация о платформе, текущий размер дисплея и событие ресайза от хоста. device — обычный
глобальный объект, ничего создавать не нужно.
Обзор
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) // и снова при каждом ресайзеИнфо о платформе
device.platform // "web" | "android" | "ios" | string (только чтение)
device.language // код языка хоста, напр. "en" (только чтение)
device.pixelRatio // физических px на логический px; 1 на обычных дисплеях, 2–3 на retina/iOSpixelRatio — коэффициент, с которым запекать Canvas для чёткого вывода без хардкода:
new Canvas(w, h, { pixelRatio: device.pixelRatio }). Откатывается к 1, если хост его не
сообщает.
веб-поверхность 2D/GL сейчас рендерит в логическом разрешении, поэтому на вебе pixelRatio помогает
только UI-канвасам; на iOS (физическая поверхность) он делает 2D-канвасы чёткими.
Размер дисплея
device.width // текущая ширина дисплея, логические px (только чтение)
device.height // текущая высота дисплея, логические px (только чтение)Те же значения, что доставляет событие resize, но читаемые в любой момент — не только внутри
слушателя. Оба — логические px (как clientX/clientY), никогда не физические пиксели.
оба равны 0, пока хост не сообщил размер. Не строй layout из device.width в начале файла,
который выполняется до первого кадра — подпишись ещё и на resize.
Событие resize
device.addEventListener('resize', (width, height) => { }) // логические px
device.removeEventListener('resize', callback) // та же ссылка на функциюСрабатывает при любом изменении вьюпорта хоста (поворот, ресайз окна). Единственный канал, который
эмитит device; другие имена каналов игнорируются.
Точный тач
device.setPreciseTouch(enabled: boolean) // ВЫКЛ по умолчаниюПодключи систему точного тача там, где платформа её поддерживает. Когда включено, быстрые штрихи сэмплируются на полной частоте дигитайзера (объединённые касания iOS, ≈120–240 Гц), а не раз в кадр дисплея (~60 Гц) — приложение с активным вводом (рисование, рукописный ввод, перетаскивание) получает больше точек и более гладкие линии. Для tap/кнопочных UI оставь выключенным.
гейтится хостом — тихий no-op на хостах без понятия объединённого ввода (веб уже объединяет pointermove; headless).
Смотрите также
- События указателя и жесты — события, которые питает точный тач.
- Соглашения — логические px, паттерн
addEventListener.