웹 사이트를 운영하다 보면 사용자가 원하는 테마를 선택할 수 있는 기능이 필요할 수 있습니다. 이를 위해 자바스크립트의 fetch API를 사용하여 웹 사이트 테마를 동적으로 변경하는 방법을 알아보겠습니다.
1. 테마 스타일시트 작성
먼저, 각 테마에 해당하는 스타일시트를 작성해야 합니다. 예를 들어, “light”와 “dark” 두 가지 테마를 가진다고 가정하겠습니다. 각 테마에 대한 스타일시트는 다음과 같이 작성할 수 있습니다.
/* light.css */
body {
background-color: #ffffff;
color: #000000;
}
/* dark.css */
body {
background-color: #000000;
color: #ffffff;
}
2. 테마 스위칭 버튼 생성
다음으로, 사용자가 테마를 변경할 수 있는 버튼을 웹 페이지에 생성해야 합니다. 이 버튼을 클릭하면 선택한 테마의 스타일시트를 불러오도록 구현할 것입니다.
<button id="theme-switcher">테마 변경</button>
3. fetch API를 이용한 테마 변경
이제 자바스크립트의 fetch API를 사용하여 테마를 변경하는 기능을 구현할 차례입니다. 스크립트 태그를 사용하여 웹 페이지에 다음과 같은 코드를 추가해주세요.
<script>
const themeSwitcher = document.getElementById('theme-switcher');
themeSwitcher.addEventListener('click', () => {
// 현재 테마를 확인하고, 반대 테마의 스타일시트를 불러온다
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
const themeUrl = `/${newTheme}.css`;
// fetch API를 사용하여 스타일시트를 불러온다
fetch(themeUrl)
.then(response => response.text())
.then(css => {
// 현재 페이지의 스타일시트를 제거하고, 새로 불러온 스타일시트를 추가한다
const styleTag = document.createElement('style');
styleTag.setAttribute('data-theme', newTheme);
styleTag.innerHTML = css;
const head = document.querySelector('head');
const currentStyleTag = head.querySelector('[data-theme]');
if (currentStyleTag) {
head.removeChild(currentStyleTag);
}
head.appendChild(styleTag);
// 새로 설정된 테마를 저장한다
document.documentElement.setAttribute('data-theme', newTheme);
})
.catch(error => {
// 스타일시트를 불러오는 중에 에러가 발생하면 오류메시지를 표시한다
console.error(error);
});
});
</script>
위의 코드에서는 클릭 이벤트 리스너를 추가하여 테마 변경 버튼이 클릭되면 발동하도록 설정합니다. 현재 페이지에서 현재 테마를 확인하고, 반대 테마의 스타일시트의 URL을 생성합니다. 그 후 fetch API를 사용하여 스타일시트를 가져옵니다. 스타일시트를 가져온 후에는 현재 페이지의 스타일시트를 제거하고, 새로 가져온 스타일시트를 추가합니다. 마지막으로, 변경된 테마를 저장하기 위해 data-theme
속성을 사용하여 HTML 요소에 테마 정보를 설정합니다.
테마 스위칭이 완료되었습니다!
이제 사용자는 “테마 변경” 버튼을 클릭하여 웹 사이트의 테마를 동적으로 변경할 수 있습니다. 자바스크립트의 fetch API를 활용하여 간단하게 테마 스위칭 기능을 구현할 수 있으니, 웹 개발에 활용해보세요!