Skip to content

Instantly share code, notes, and snippets.

@bigmistqke
Last active July 21, 2023 09:02
Show Gist options
  • Save bigmistqke/92e301334ca1a0f270fba8627e3a20c6 to your computer and use it in GitHub Desktop.
Save bigmistqke/92e301334ca1a0f270fba8627e3a20c6 to your computer and use it in GitHub Desktop.
cursor.ts
import { Vector } from '@ndbx/types';
import { MouseEvent as MouseEventReact } from 'react';
/**
* cursor
*
* @param e MouseEvent
* @param callback called every onMouseMove
* @returns Promise resolved onMouseUp
*/
export const cursor = (e: MouseEventReact, callback: (delta: Vector, event: MouseEvent, timespan: number) => void) => {
return new Promise<{ delta: Vector; event: MouseEvent; timespan: number }>((resolve) => {
const start = {
x: e.clientX,
y: e.clientY,
};
const startTime = performance.now();
const onMouseMove = (e: MouseEvent) => {
callback(
{
x: start.x - e.clientX,
y: start.y - e.clientY,
},
e,
performance.now() - startTime
);
};
const onMouseUp = (e: MouseEvent) => {
window.removeEventListener('mousemove', onMouseMove);
window.removeEventListener('mouseup', onMouseUp);
const delta = {
x: start.x - e.clientX,
y: start.y - e.clientY,
};
callback(delta, e, performance.now() - startTime);
resolve({ delta, event: e, timespan: performance.now() - startTime });
};
window.addEventListener('mousemove', onMouseMove);
window.addEventListener('mouseup', onMouseUp);
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment