JavaScript - 2023-02-23

OSのダークモード設定に対応する方法-CSSの判定~キャッシュへの保存方法

CSSのメディアクエリで判定する方法

@media (prefers-color-scheme: dark) {
  body {
    color: #fff;
    background: #000;
  }
}

JavaScriptで外観モードで判定する方法

ダークモードであればbody要素に「is-theme-dark」クラスを付与、ライトモードであれあばbody要素に「is-theme-light」クラスを付与しています。

const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeOn = darkModeMediaQuery.matches;
darkModeMediaQuery.addListener((e) => {
    const darkModeOn = e.matches;
    if (darkModeOn) {
        document.body.classList.remove('is-light-mode');
        document.body.classList.add('is-dark-mode');
    } else {
        document.body.classList.remove('is-dark-mode');
        document.body.classList.add('is-light-mode');
    }
});

ダークモードの切り替え&キャッシュへの保存方法

HTML

<button class="js-theme-switch">button</button>

JavaScript

const themeSwitch = document.querySelector(".js-theme-switch");
const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeOn = darkModeMediaQuery.matches;

themeSwitch.addEventListener('click', function(){
  if(localStorage.getItem('dark-mode-settings')==='dark') {
    document.body.classList.remove('is-theme-dark');
    document.body.classList.add('is-theme-light');
    localStorage.setItem('dark-mode-settings', 'light');
  } else if (localStorage.getItem('dark-mode-settings')==='light') {
    document.body.classList.remove('is-theme-light');
    document.body.classList.add('is-theme-dark');
    localStorage.setItem('dark-mode-settings', 'dark');
  }
});


if(localStorage.getItem('dark-mode-settings')==='dark') {
  document.body.classList.add('is-theme-dark');
} else if (localStorage.getItem('dark-mode-settings')==='light') {
  document.body.classList.add('is-theme-light');
} else {
  if (darkModeOn) {
    document.body.classList.remove('is-theme-light');
    document.body.classList.add('is-theme-dark');
    localStorage.setItem('dark-mode-settings', 'dark');
  } else {
    document.body.classList.remove('is-theme-dark');
    document.body.classList.add('is-theme-light');
    localStorage.setItem('dark-mode-settings', 'light');
  }
}
Related Posts

Related Posts

slick.jsにオートプレイの切り替えボタンをつける方法

2022-06-22

WebStorageを使って初回アクセス時だけLoadingを表示する方法

2022-01-11

JQueryで動画・画像をランダムに再生させる方法

2019-08-26

WordPressでCSSやJSファイルのキャッシュ対策

2022-06-24