useMousePressed
Tracks mouse/touch press state reactively. Returns an observable boolean for the pressed state and the source type that triggered it.
Track mouse/touch press state reactively.
import { const useMousePressed: (options?: DeepMaybeObservable<UseMousePressedOptions>) => UseMousePressedReturn
useMousePressed } from "@usels/web";
function function Component(): JSX.Element
Component() { const { const pressed$: ReadonlyObservable<boolean>
Current pressed state
pressed$, const sourceType$: ReadonlyObservable<UseMousePressedSourceType>
Event source type: "mouse" | "touch" | null
sourceType$ } = function useMousePressed(options?: DeepMaybeObservable<UseMousePressedOptions>): UseMousePressedReturn
Framework-agnostic mouse/touch press state tracker.
Monitors pointerdown/pointerup and optionally touchstart/touchend/touchcancel
events on a target (default: window) and exposes reactive pressed state.
useMousePressed();
return ( <JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div> {const pressed$: ReadonlyObservable<boolean>
Current pressed state
pressed$.ImmutableObservableBase<boolean>.get(trackingType?: TrackingType | GetOptions): {}
get() ? "Pressed" : "Released"} — {const sourceType$: ReadonlyObservable<UseMousePressedSourceType>
Event source type: "mouse" | "touch" | null
sourceType$.ImmutableObservableBase<UseMousePressedSourceType>.get(trackingType?: TrackingType | GetOptions): any
get() ?? "none"} </JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div> );}import { createMousePressed } from "@usels/web";
function Component() { "use scope" const { pressed$, sourceType$ } = createMousePressed();
return ( <div> {pressed$.get() ? "Pressed" : "Released"} — {sourceType$.get() ?? "none"} </div> );}With target element
Section titled “With target element”By default events are listened on window. Pass any element via target to scope tracking to that element.
// @noErrorsimport { useRef$ } from "@usels/core";import { useMousePressed } from "@usels/web";
function Component() { const el$ = useRef$<HTMLDivElement>(); const { pressed$ } = useMousePressed({ target: el$ });
return ( <div ref={el$} style={{ background: pressed$.get() ? "blue" : "gray" }}> Press me </div> );}Touch support
Section titled “Touch support”Touch tracking is enabled by default. Use touch: false to disable it.
// @noErrorsimport { useMousePressed } from "@usels/web";// ---cut---// Disable touch trackingconst { pressed$ } = useMousePressed({ touch: false });Callbacks (onPressed / onReleased)
Section titled “Callbacks (onPressed / onReleased)”Use onPressed and onReleased callbacks to react to press events without subscribing to observables.
// @noErrorsimport { useMousePressed } from "@usels/web";// ---cut---const { pressed$ } = useMousePressed({ onPressed: (e) => console.log("pressed", e), onReleased: (e) => console.log("released", e),});Prevent drag
Section titled “Prevent drag”Set preventDragEvent: true to prevent the default drag behavior while pressing.
// @noErrorsimport { useMousePressed } from "@usels/web";// ---cut---const { pressed$ } = useMousePressed({ preventDragEvent: true });Combined with useMouse
Section titled “Combined with useMouse”Use useMousePressed alongside useMouse to track both cursor position and press state simultaneously.
// @noErrorsimport { useRef$ } from "@usels/core";import { useMouse, useMousePressed } from "@usels/web";
function Component() { const el$ = useRef$<HTMLDivElement>(); const { x$, y$ } = useMouse({ target: el$ }); const { pressed$, sourceType$ } = useMousePressed({ target: el$ });
return ( <div ref={el$}> Position: {x$.get()}, {y$.get()} <br /> Pressed: {String(pressed$.get())} ({sourceType$.get() ?? "none"}) </div> );}Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
options | UseMousePressedOptions (optional) | - |
UseMousePressedOptions
Section titled “UseMousePressedOptions”Returns
Section titled “Returns”UseMousePressedReturn
| Name | Type | Description |
|---|---|---|
pressed$ | ReadonlyObservable<boolean> | Current pressed state |
sourceType$ | ReadonlyObservable<UseMousePressedSourceType> | Event source type: “mouse” | “touch” | null |