jobiqo-cl
Version:
[](https://circleci.com/gh/jobiqo/jobiqo-cl)
38 lines (35 loc) • 1.19 kB
JavaScript
import { useState, useEffect } from 'react';
const isBrowser = typeof window !== `undefined`;
function getScrollPosition() {
return isBrowser
? { x: window.pageXOffset, y: window.pageYOffset }
: { x: 0, y: 0 };
}
function useScrollPosition() {
const [position, setScrollPosition] = useState(getScrollPosition());
useEffect(() => {
let requestRunning = null;
function handleScroll() {
if (isBrowser && requestRunning === null) {
requestRunning = window.requestAnimationFrame(() => {
setScrollPosition(getScrollPosition());
requestRunning = null;
});
}
}
if (isBrowser) {
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}
}, []);
return position;
}
function useScrollXPosition() {
const { x } = useScrollPosition();
return x;
}
function useScrollYPosition() {
const { y } = useScrollPosition();
return y;
}
export { useScrollPosition, useScrollXPosition, useScrollYPosition };