在 Astro Astrofy 樣板中實作 Theme Controller 功能
astro
本篇文章使用 Astro 的 Template 叫做 Astrofy
,這個樣板底下套用的 UI Framework 是 DaisyUI
,所以文章內將會以此 UI 框架為基底,實作主題切換 (Theme Switch) 的功能。
首先我們要先看這個樣板是如何設定主題的,我們可以在 BaseLayout.astro
這個 Layout 當中找到 html
有 data-theme
屬性
這個 data-theme
可以設定預設套用的 theme 名稱,DaisyUI
提供了很多樣化的主題可以讓使用者自行更改主題配色,以下列出 DaisyUI
支援的主題配色清單
接下來我們就要在畫面中加上 Theme Controller
component,讓使用者有地方可以切換主題,我這邊選擇的是加入到 sidebar footer
,當然,也可以加在其他適合的區塊當中
這邊我把 Theme Controller
的 input 加上 id="theme-controller
方便寫 javascript 可以抓到,而 input 上面的 value
代表的是當這個 checkbox 被勾選的時候會套用的主題名稱
所以在這個架構底下,可以稍微先整理一下如果今天要用 javascript 實作具有記憶功能的 Theme Switch
功能,我們先簡單列出預期的功能
- 讀取目前瀏覽器設定值 (
prefers-color-scheme
),如果是 dark 就套用顏色深的主題,反之,則套用淺色的主題 Theme Controller
在切換主題時,要能夠將目前的主題名稱儲存到localStorage
當中- 切換頁面、刷新頁面時,主題不會跑掉 (路由切換時不會跑掉)
以上就是如何在 Astro Astrofy Template 當中實作具有記憶功能的 Theme Controller