본문 바로가기
JS

Detect Dark Mode 다크모드 감지하기

by memory-log 2020. 12. 19.

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

댓글