diff --git a/theme-terminal/src/custom.ts b/theme-terminal/src/custom.ts index ece9bcc..f1056ef 100644 --- a/theme-terminal/src/custom.ts +++ b/theme-terminal/src/custom.ts @@ -1,3 +1,4 @@ +// 文字打字机效果 export const typewriterEffect = (selectors: string) => { const typedTextContainer = document.querySelector(selectors) @@ -20,4 +21,25 @@ export const typewriterEffect = (selectors: string) => { } typewriter() +} + +// 切换黑白主题 +export const handleToggleThemeMode = (selectors: string) => { + const toggleButton = document.querySelector(selectors); + + if(!toggleButton) return + + const storedTheme = localStorage.getItem("theme-mode") || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"); + + if (storedTheme) document.documentElement.setAttribute("data-color-scheme", storedTheme); + + toggleButton.onclick = function () { + const currentTheme = document.documentElement.getAttribute("data-color-scheme"); + + const targetTheme = currentTheme === "dark" ? "light" : "dark"; + + document.documentElement.setAttribute("data-color-scheme", targetTheme); + + localStorage.setItem("theme-mode", targetTheme); + }; } \ No newline at end of file diff --git a/theme-terminal/src/main.ts b/theme-terminal/src/main.ts index 54db756..7243f06 100644 --- a/theme-terminal/src/main.ts +++ b/theme-terminal/src/main.ts @@ -5,7 +5,7 @@ import './styles/font-hack.scss' import Alpine from 'alpinejs' import upvote from './upvote' -import {typewriterEffect} from './custom' +import {typewriterEffect, handleToggleThemeMode} from './custom' window.Alpine = Alpine @@ -15,4 +15,6 @@ Alpine.start() document.addEventListener('DOMContentLoaded', () => { typewriterEffect('.typed-text') + + handleToggleThemeMode('#theme-toggle') }) diff --git a/theme-terminal/templates/modules/header.html b/theme-terminal/templates/modules/header.html index f271886..b439024 100644 --- a/theme-terminal/templates/modules/header.html +++ b/theme-terminal/templates/modules/header.html @@ -66,24 +66,5 @@ -