Skip to content

useLongPress ​

Розпізнавання довгого натискання для будь-якого елемента. Лежить в основі <orio-long-press>; використовуйте напряму, коли потрібна поведінка без ефекту зменшення, який дає обгортка.

Живе демо ​

Утримуйте тут

Використання ​

ts
const target = ref<HTMLElement | null>(null);

const { isPressing, isHolding } = useLongPress(target, {
  delay: 600,
  onStart: () => log.value.unshift("start"),
  onCancel: () => log.value.unshift("cancel"),
  onTrigger: (event, source) => log.value.unshift(`trigger (${source})`),
});

Опції ​

ОпціяТипЗа замовчуваннямОпис
delayMaybeRefOrGetter<number>500Час утримання в мс
moveToleranceMaybeRefOrGetter<number>10Зсув у px, що скасовує натискання
forceTouchMaybeRefOrGetter<boolean>trueForce click у Safari спрацьовує одразу
disabledMaybeRefOrGetter<boolean>falseІгнорувати натискання; скасовує активне
onStart(event: PointerEvent) => void—Основний вказівник натиснуто
onCancel() => void—Натискання завершилося без спрацювання
onTrigger(event, source: "hold" | "force") => voidобов'язковаУтримання досягло delay або стався force click

Повертає ​

КлючТипОпис
isPressingReadonly<Ref<boolean>>true від pointerdown до спрацювання або скасування
isHoldingReadonly<Ref<boolean>>true від pointerdown, доки палець не піднято або натискання не скасовано — триває й після спрацювання

Примітки ​

  • Клік після спрацювання поглинається (фаза перехоплення на window, тож це охоплює й відпускання над оверлеєм, який відкрило спрацювання). Кліки з клавіатури проходять; Ctrl+клік ніколи не починає натискання.
  • Вкладені цілі: натискання обробляє лише найглибша.
  • Поки isHolding, selectstart і contextmenu на цілі блокуються; під час спрацювання будь-яке виділення всередині цілі знімається. Для iOS прив'яжіть user-select: none / -webkit-touch-callout: none до isHolding.
  • Не плутайте з usePressAndHold, який повторює колбек, поки кнопку утримують.