-
Notifications
You must be signed in to change notification settings - Fork 11
/
registerMouseEvent.ts
40 lines (35 loc) · 1.09 KB
/
registerMouseEvent.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
export function registerMouseEvent(
move: ( event: MouseEvent, movementSum: { x: number; y: number } ) => void,
up?: ( event: MouseEvent ) => void
): void {
let isDone = false;
let moveEvent: MouseEvent | undefined;
let movementSum = { x: 0.0, y: 0.0 };
const update = (): void => {
if ( isDone ) { return; }
requestAnimationFrame( update );
if ( moveEvent ) {
move( moveEvent, movementSum );
moveEvent = undefined;
movementSum = { x: 0.0, y: 0.0 };
}
};
update();
const movet = ( event: MouseEvent ): void => {
moveEvent = event;
movementSum.x += event.movementX;
movementSum.y += event.movementY;
};
const upt = ( event: MouseEvent ): void => {
if ( !isDone ) {
up && up( event );
isDone = true;
}
window.removeEventListener( 'mousemove', movet );
window.removeEventListener( 'mouseup', upt );
window.removeEventListener( 'mousedown', upt );
};
window.addEventListener( 'mousemove', movet );
window.addEventListener( 'mouseup', upt );
setTimeout( () => window.addEventListener( 'mousedown', upt ) );
}