document.visibilityState
document.visibilityState를 이용한 페이지의 상태를 확인하는 방법
2024-12-06
웹 페이지가 현재 사용자에게 보이는지 아닌지를 확인하는 방법이 있다.
document.visibilityState
를 사용하면 페이지가 현재 사용자에게 보이는지 아닌지를 확인할 수 있다.
document.visibilityState
는 다음과 같은 상태를 가진다.
-
'visible' : 페이지 내용은 적어도 부분적으로 보일 수 있다. 실제로 이는 페이지가 최소화 되지 않은 창(브라우저)에서의 선택된 탭 을 의미
-
'hidden' : 페이지 내용은 사용자에게 표시되지 않는다. 실제로 이는 document가 background-tap(다른 탭)이거나, 최소화 된 창의 일부이거나, OS 화면 잠금이 활성 상태임을 의미
if (document.visibilityState === 'visible') {
// 페이지가 사용자에게 보이는 상태
} else {
// 페이지가 사용자에게 보이지 않는 상태
}
import { useEffect } from 'react';
interface UseVisibilityChangeProps {
onVisible: () => void;
onHidden: () => void;
dependencies?: unknown[];
}
const useVisibilityChange = ({
onVisible,
onHidden,
dependencies = [],
}: UseVisibilityChangeProps) => {
useEffect(() => {
const onVisibilityChange = () => {
document.visibilityState === 'visible' ? onVisible() : onHidden();
};
document.addEventListener('visibilitychange', onVisibilityChange);
return () => {
document.removeEventListener('visibilitychange', onVisibilityChange);
};
}, [onHidden, onVisible, ...dependencies]);
};
export default useVisibilityChange;
웹 페이지 이탈을 감지할 수 있고, 모바일 웹뷰에서 앱의 백그라운드 상태나 전환을 감지할 수 있다.