Skip to content

Instantly share code, notes, and snippets.

@wkei
Created March 10, 2020 04:38
Show Gist options
  • Save wkei/d109c8c132679937cf01b520af4713c2 to your computer and use it in GitHub Desktop.
Save wkei/d109c8c132679937cf01b520af4713c2 to your computer and use it in GitHub Desktop.
useWheel.ts
import { useState, useLayoutEffect } from 'react';
interface UseWheelType {
deltaX: number;
deltaY: number;
}
const useWheel = (ref: React.RefObject<HTMLDivElement>): UseWheelType => {
const [deltaX, setDeltaX] = useState<number>(0);
const [deltaY, setDeltaY] = useState<number>(0);
useLayoutEffect(() => {
const { current } = ref;
const handler = (event: WheelEvent): void => {
setDeltaX(event.deltaX);
setDeltaY(event.deltaY);
};
if (current) current.addEventListener('wheel', handler);
return (): void => {
if (current) current.removeEventListener('wheel', handler);
};
}, [ref]);
return {
deltaX,
deltaY,
};
};
export default useWheel;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment