ํฐ์คํ ๋ฆฌ ๋ทฐ
Dark-mode
Question ํ ๊ธ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ ๋ง(๋คํฌ ๋ชจ๋/๋ผ์ดํธ ๋ชจ๋)๋ฅผ ์ค์ ํ๋ฉด ํ ๋ง๊ฐ ๋ทฐ์ ๋ฐ์๋๋๋ก ๊ตฌํํ๊ณ ์ ํ๋ค.ํ ๋ง๋ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅํ์ฌ ์นํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ํ๊ฑฐ๋ ๋ค์ ์ ๊ทผํ์ ๋
choi95.tistory.com
์ด์ ํฌ์คํ ์์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฌ๋์ด ์๋ value ๊ฐ์ ๋ฐ๋ผ ๋ฐฐ๊ฒฝ ํ ๋ง ์์์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํด ์ฃผ์๋ค.
๋ก์ปฌ ์คํ ๋ฆฌ์ง๊ฐ ์๋ ํ์ฌ ์ด์ ์ฒด์ ๋ ๋ฒจ์์ ์ค์ ๋ ์ฌ์ฉ์ ํ ๋ง(๋คํฌ ๋ชจ๋/๋ผ์ดํธ ๋ชจ๋)๋ฅผ ํ ๋๋ก ๋ฐฐ๊ฒฝ ์์์ ๋ฐ๊ฟ ์ ์๋ค.
window.matchMedia
๋ค์๊ณผ ๊ฐ์ด window.matchMedia ๋ฉ์๋๋ฅผ ์ฝ์ ์ฐฝ์ ์ถ๋ ฅํด ๋ณด๋ฉด MediaQueryList ๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํจ์ ํ์ธํ ์ ์๊ณ
ํ๋กํผํฐ ์ค matches์ ๊ฐ์ด true๋ก ๋์์์์ ํ์ธํ ์ ์๋ค.
์ด๋ ํ์ฌ ์ฌ์ฉ์ ํ ๋ง๋ ๋คํฌ ๋ชจ๋๋ก ๋์ด ์๊ณ matchMedia ๋ฉ์๋ ์ธ์๋ก ๋ฃ์ css ๋ฏธ๋์ด ํน์ฑ์ธ prefers-color-scheme์ ํตํด
์ฌ์ฉ์์ ์์คํ ์ด ๋ผ์ดํธ ํ ๋ง๋ ๋คํฌ ํ ๋ง๋ฅผ ์ฌ์ฉํ๋์ง ํ์งํ์ฌ ๋น๊ต ๋ boolean ๊ฒฐ๊ณผ๊ฐ์ด๋ค.
์ด๋ฌํ matches ์์ฑ์ ์ด์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ์ ์์คํ ๊ณผ ์์ํ๋ ๋ฐฐ๊ฒฝ ์์ ํ ๋ง๋ฅผ ์ ์ฉ์ํฌ ์ ์๋ค.
document.addEventListener('DOMContentLoaded', () => {
let theme = localStorage.getItem('theme');
if (!theme) {
const {matches} = window.matchMedia('(prefers-color-scheme: dark)');
theme = matches ? 'dark' : 'light';
localStorage.setItem('theme', theme);
};
document.body.classList.toggle('dark', theme === 'dark');
setTimeout(() => {
document.body.style.visibility = 'visible';
}, 300);
});
document.querySelector('.toggle-button').onclick = e => {
const theme = localStorage.getItem('theme');
localStorage.setItem('theme', `${theme === 'dark' ? 'light' : 'dark'}`);
document.body.classList.toggle('dark');
};
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
createDocumentFragment()๋ฅผ ํตํ ์์ ์์ฑ (0) | 2021.07.05 |
---|---|
stopwatch (0) | 2021.07.05 |
Dark-mode (0) | 2021.07.02 |
Intersection Observer API๋ฅผ ํตํ ์ด๋ฒคํธ ์ต์ ํ (0) | 2021.07.01 |
Debounce ํจ์๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ต์ ํ (0) | 2021.07.01 |