react-use/src/useWindowScroll.ts
2019-10-16 23:05:50 +11:00

39 lines
734 B
TypeScript

import { useEffect } from 'react';
import { isClient } from './util';
import useRafState from './useRafState';
export interface State {
x: number;
y: number;
}
const useWindowScroll = (): State => {
const [state, setState] = useRafState<State>({
x: isClient ? window.pageXOffset : 0,
y: isClient ? window.pageYOffset : 0,
});
useEffect(() => {
const handler = () => {
setState({
x: window.pageXOffset,
y: window.pageYOffset,
});
};
window.addEventListener('scroll', handler, {
capture: false,
passive: true,
});
return () => {
window.removeEventListener('scroll', handler);
};
}, []);
return state;
};
export default useWindowScroll;