Detect Dark Mode
다크모드 감지 JS
Detect dark mode in safari
prefers-color-scheme 으로 다크모드를 감지한다.
safari Dark mode error
Since safari doesn't eat addEventListener, branch to try catch
safari에서 addEventListener 안먹으므로 try catch 로 분기
const [isDark, setIsDark] = useState(window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches);
useEffect(() => {
const detectMode = () => {
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
setIsDark(true);
} else {
setIsDark(false);
}
};
detectMode();
const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
// Add Dark Mode Event
try {
// Chrome & Firefox
darkMediaQuery.addEventListener('change', e => {
detectMode();
});
} catch (e1) {
try {
// Safari
darkMediaQuery.addListener(e => {
detectMode();
});
} catch (e2) {
console.error(e2);
}
}
return () => {
// Remove Dark Mode Event
try {
// Chrome & Firefox
darkMediaQuery.removeEventListener('change', e => {
detectMode();
});
} catch (e1) {
try {
// Safari
darkMediaQuery.removeListener(e => {
detectMode();
});
} catch (e2) {
console.error(e2);
}
}
};
}, []);
'JS' 카테고리의 다른 글
javascript ES version up to 2020, ES11 (0) | 2021.01.07 |
---|---|
비동기 처리 AJAX , XMLHttpRequest (0) | 2020.12.19 |
IE10 dataset nor working (0) | 2020.12.19 |
useSWR 리액트 훅 데이터 라이브러리 (0) | 2020.12.19 |
자바스크립트 모듈관리 (0) | 2020.10.10 |
댓글