feat(theme): 主题优化
这个提交包含在:
@@ -1,3 +1,4 @@
|
|||||||
|
// 文字打字机效果
|
||||||
export const typewriterEffect = (selectors: string) => {
|
export const typewriterEffect = (selectors: string) => {
|
||||||
const typedTextContainer = document.querySelector<HTMLDivElement>(selectors)
|
const typedTextContainer = document.querySelector<HTMLDivElement>(selectors)
|
||||||
|
|
||||||
@@ -20,4 +21,25 @@ export const typewriterEffect = (selectors: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
typewriter()
|
typewriter()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 切换黑白主题
|
||||||
|
export const handleToggleThemeMode = (selectors: string) => {
|
||||||
|
const toggleButton = document.querySelector<HTMLDivElement>(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);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@ import './styles/font-hack.scss'
|
|||||||
|
|
||||||
import Alpine from 'alpinejs'
|
import Alpine from 'alpinejs'
|
||||||
import upvote from './upvote'
|
import upvote from './upvote'
|
||||||
import {typewriterEffect} from './custom'
|
import {typewriterEffect, handleToggleThemeMode} from './custom'
|
||||||
|
|
||||||
window.Alpine = Alpine
|
window.Alpine = Alpine
|
||||||
|
|
||||||
@@ -15,4 +15,6 @@ Alpine.start()
|
|||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
typewriterEffect('.typed-text')
|
typewriterEffect('.typed-text')
|
||||||
|
|
||||||
|
handleToggleThemeMode('#theme-toggle')
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -66,24 +66,5 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<script>
|
|
||||||
var toggle = document.getElementById("theme-toggle");
|
|
||||||
|
|
||||||
var storedTheme =
|
|
||||||
localStorage.getItem("theme") || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
|
|
||||||
if (storedTheme) document.documentElement.setAttribute("data-color-scheme", storedTheme);
|
|
||||||
|
|
||||||
toggle.onclick = function () {
|
|
||||||
var currentTheme = document.documentElement.getAttribute("data-color-scheme");
|
|
||||||
var targetTheme = "light";
|
|
||||||
|
|
||||||
if (currentTheme === "light") {
|
|
||||||
targetTheme = "dark";
|
|
||||||
}
|
|
||||||
|
|
||||||
document.documentElement.setAttribute("data-color-scheme", targetTheme);
|
|
||||||
localStorage.setItem("theme", targetTheme);
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|||||||
在新议题中引用
屏蔽一个用户