Skip to content

useMouse

Hook that manages a mouse position

sensors
low
test coverage
Last changed: 4 days ago

Installation

Library
CLI
Manual
typescript
import { useMouse } from '@siberiacancode/reactuse';

Usage

typescript
const mouse = useMouse(ref);
// or
const mouse = useMouse<HTMLDivElement>();

Demo

Api

Parameters

NameTypeDefaultNote
target?HookTargetwindowThe target element to manage the mouse position for
callback?(value: UseMouseValue, event: Event) => void-The callback to invoke on mouse updates

Returns

UseMouseReturn

Parameters

NameTypeDefaultNote
callback?(value: UseMouseValue, event: Event) => void-The callback to invoke on mouse updates

Returns

UseMouseReturn & { ref: StateRef<Target> }

Type declaration

typescript
import type { HookTarget } from '@/utils/helpers';

import type { StateRef } from '../useRefState/useRefState';

export interface UseMouseReturn {
  /** The latest mouse value snapshot */
  snapshot: UseMouseValue;
  /** Function to enable subscriptions and rerender on next updates */
  watch: () => UseMouseValue;
}

export interface UseMouseValue {
  /** The current mouse client x position */
  clientX: number;
  /** The current mouse client y position */
  clientY: number;
  /** The current element position x */
  elementPositionX: number;
  /** The current element position y */
  elementPositionY: number;
  /** The current element x position */
  elementX: number;
  /** The current element y position */
  elementY: number;
  /** The current mouse x position */
  x: number;
  /** The current mouse y position */
  y: number;
}

export type UseMouseCallback = (value: UseMouseValue, event: Event) => void;

export interface UseMouse {
  (target: HookTarget, callback?: UseMouseCallback): UseMouseReturn;

  <Target extends Element>(
    callback?: UseMouseCallback,
    target?: never
  ): UseMouseReturn & {
    ref: StateRef<Target>;
  };

  (target?: Window, callback?: UseMouseCallback): UseMouseReturn;
}

Source

SourceDemo

Contributors

D
debabin
debabin
H
hywax
hywax

Released under the MIT License.