useMouse
Tracks the mouse/pointer cursor position reactively. Supports multiple coordinate systems (page, client, screen, movement) and optional touch event tracking.
Track mouse cursor position in real-time.
import { const useMouse: (options?: DeepMaybeObservable<UseMouseOptions>) => UseMouseReturn
useMouse } from "@usels/web";
function function Component(): JSX.Element
Component() { const { const x$: ReadonlyObservable<number>
X coordinate
x$, const y$: ReadonlyObservable<number>
Y coordinate
y$, const sourceType$: ReadonlyObservable<UseMouseSourceType>
Event source type: "mouse" | "touch" | null
sourceType$ } = function useMouse(options?: DeepMaybeObservable<UseMouseOptions>): UseMouseReturn
Framework-agnostic mouse/touch position tracker.
Monitors mousemove and optionally touchstart/touchmove/touchend
events on a target (default: window) and exposes reactive coordinates.
useMouse();
return ( <JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div> {const x$: ReadonlyObservable<number>
X coordinate
x$.ImmutableObservableBase<number>.get(trackingType?: TrackingType | GetOptions): {}
get()}, {const y$: ReadonlyObservable<number>
Y coordinate
y$.ImmutableObservableBase<number>.get(trackingType?: TrackingType | GetOptions): {}
get()} — {const sourceType$: ReadonlyObservable<UseMouseSourceType>
Event source type: "mouse" | "touch" | null
sourceType$.ImmutableObservableBase<UseMouseSourceType>.get(trackingType?: TrackingType | GetOptions): any
get()} </JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div> );}import { createMouse } from "@usels/web";
function Component() { "use scope" const { x$, y$, sourceType$ } = createMouse();
return ( <div> {x$.get()}, {y$.get()} — {sourceType$.get()} </div> );}Coordinate types
Section titled “Coordinate types”The type option selects which coordinate system to use. It is read only at mount time.
// @noErrorsimport { useMouse } from "@usels/web";// ---cut---// "page" (default) — relative to the documentconst { x$, y$ } = useMouse({ type: "page" });
// "client" — relative to the viewportconst { x$: cx$, y$: cy$ } = useMouse({ type: "client" });
// "screen" — relative to the screenconst { x$: sx$, y$: sy$ } = useMouse({ type: "screen" });
// "movement" — delta movement since last event (MouseEvent.movementX/Y)const { x$: mx$, y$: my$ } = useMouse({ type: "movement" });Touch support
Section titled “Touch support”Touch tracking is enabled by default. Use touch: false to disable it, or resetOnTouchEnds: true to reset coordinates back to the initial value when the finger lifts.
// @noErrorsimport { useMouse } from "@usels/web";// ---cut---// Disable touch trackingconst { x$, y$ } = useMouse({ touch: false });
// Reset to origin on touchendconst { x$: rx$, y$: ry$ } = useMouse({ resetOnTouchEnds: true });Custom target
Section titled “Custom target”By default events are listened on window. Pass any element (or an Observable wrapping one) via target to scope tracking to that element.
// @noErrorsimport { useRef$ } from "@usels/core";import { useMouse } from "@usels/web";
function Component() { const el$ = useRef$<HTMLDivElement>(); const { x$, y$ } = useMouse({ target: el$ });
return ( <div ref={el$}> {x$.get()}, {y$.get()} </div> );}With useMouseInElement combination
Section titled “With useMouseInElement combination”Use useMouse for global coordinates while useMouseInElement provides element-relative coordinates at the same time.
// @noErrorsimport { useRef$ } from "@usels/core";import { useMouse, useMouseInElement } from "@usels/web";
function Component() { const el$ = useRef$<HTMLDivElement>(); const { x$, y$ } = useMouse(); const { elementX$, elementY$, isOutside$ } = useMouseInElement(el$);
return ( <div ref={el$}> Global: {x$.get()}, {y$.get()} <br /> Local: {elementX$.get()}, {elementY$.get()} (outside: {String(isOutside$.get())}) </div> );}Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
options | UseMouseOptions (optional) | - |
UseMouseOptions
Section titled “UseMouseOptions”Returns
Section titled “Returns”UseMouseReturn
| Name | Type | Description |
|---|---|---|
x$ | ReadonlyObservable<number> | X coordinate |
y$ | ReadonlyObservable<number> | Y coordinate |
sourceType$ | ReadonlyObservable<UseMouseSourceType> | Event source type: “mouse” | “touch” | null |