useLongPress

Handles long press interactions across mouse and touch devices. Supports a customizable time threshold, accessibility description, and normalizes behavior across browsers and devices.

    import React from 'react';
    import {mergeProps} from 'react-aria';
    import {useLongPress, usePress} from '@react-aria/interactions';
    
    function Example() {
      let [events, setEvents] = React.useState<string[]>([]);
      let [mode, setMode] = React.useState('Activate');
    
      // Long press to activate "Hyper speed"
      let {longPressProps} = useLongPress({
        accessibilityDescription: 'Long press to activate hyper speed',
        onLongPressStart: e => setEvents(
          events => [`long press start with ${e.pointerType}`, ...events]
        ),
        onLongPressEnd: e => setEvents(
          events => [`long press end with ${e.pointerType}`, ...events]
        ),
        onLongPress: e => {
          setMode('Hyper speed');
          setEvents(
            events => [`long press with ${e.pointerType}`, ...events]
          );
        }
      });
    
      // Short press to activate "Normal speed"
      let {pressProps} = usePress({
        onPress: e => {
          setMode('Normal speed');
          setEvents(
            events => [`press with ${e.pointerType}`, ...events]
          );
        }
      });
    
      return (
        <>
          <button {...mergeProps(pressProps, longPressProps)}>{mode}</button>
          <ul
            style={{
              maxHeight: '200px',
              overflow: 'auto'
            }}>
            {events.map((e, i) => <li key={i}>{e}</li>)}
          </ul>
        </>
      );
    }
    

    Features

    A long press is triggered when a user presses and holds their pointer over a target for a minimum period of time. If the user moves their pointer off of the target before the time threshold, the interaction is canceled. Once a long press event is triggered, other pointer interactions that may be active such as usePress and useMove will be canceled so that only the long press is activated.

    • Handles mouse and touch events
    • Prevents text selection on touch devices while long pressing
    • Prevents browser and OS context menus from appearing while long pressing
    • Customizable time threshold for long press
    • Supports an accessibility description to indicate to assistive technology users that a long press action is available

    API

    useLongPress(props: ):

    LongPressProps

    NameTypeDefault
    accessibilityDescriptionstringDefault:
    A description for assistive techology users indicating that a long press action is available, e.g. "Long press to open menu".
    thresholdnumberDefault: 500ms
    The amount of time in milliseconds to wait before triggering a long press.
    onLongPress(e: ) => voidDefault:
    Handler that is called when the threshold time is met while the press is over the target.
    onLongPressEnd(e: ) => voidDefault:
    Handler that is called when a long press interaction ends, either over the target or when the pointer leaves the target.
    onLongPressStart(e: ) => voidDefault:
    Handler that is called when a long press interaction starts.
    isDisabledbooleanDefault:
    Whether long press events should be disabled.

    LongPressResult

    NameType
    longPressPropsDOMAttributes
    Props to spread on the target element.

    LongPressEvent

    Each of these handlers is fired with a LongPressEvent, which exposes information about the target and the type of event that triggered the interaction.

    NameType
    ynumber
    Y position relative to the target.
    xnumber
    X position relative to the target.
    altKeyboolean
    Whether the alt keyboard modifier was held during the press event.
    metaKeyboolean
    Whether the meta keyboard modifier was held during the press event.
    ctrlKeyboolean
    Whether the ctrl keyboard modifier was held during the press event.
    shiftKeyboolean
    Whether the shift keyboard modifier was held during the press event.
    targetElement
    The target element of the press event.
    pointerType
    The pointer type that triggered the press event.
    type'longpressstart''longpressend''longpress'
    The type of long press event being fired.