vue項目動態換皮膚/換主題的通用實現方式(熱換膚,無需重啓項目,通俗易懂,看了就會!!!)

VUE項目動態切換皮膚/主題的通用實現方式

 

提供一種通用的的解決方案,無需重啓項目,無需更改import的文件路徑,直接通過功能按鈕熱更換皮膚/主題

 

vue-cli版本:3.0

 

1. 在pulic目錄下創建skin目錄,新建day.css和night.css兩個主題樣式文件,並在其中聲明css變量

day.css

/*日間模式*/
:root {
    --bgColor: white;
    --fontColor: black;
 }

night.css

/*日間模式*/
:root {
    --bgColor: black;
    --fontColor: white;
 }

 

2. 找到index.html總入口文件,使用link標籤引入css文件

在這裏引入的樣式即全局樣式,所有子組件可以直接使用

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <!--皮膚-->
    <link id="skin" rel="stylesheet" type="text/css" href="/skin/day.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

 

3. 爲項目中的換膚按鈕綁定換膚事件,傳入不同的參數,從而動態改變link標籤的href屬性

// type爲night或者day
changeSkin (type) {
    // 節流防止瘋狂點擊
    if (change) {
         clearTimeout(change)
    }
    let change = setTimeout(() => {
        document.head.querySelector('#skin').setAttribute('href', `/skin/${type}.css`)
    }, 100)
}

 

4. 在需要控制皮膚樣式的組件中,直接使用night.css或者day.css中聲明的全局變量即可

.content-xxxx {
    background-color: var(--bgColor);
    color: var(--fontColor);
}

 

注意:一般的換膚業務中,night.css與day.css中的變量名稱與數量應該相同,具體的樣式根據主題風格進行各自定義,

想要添加其他風格,新增xxx.css主題文件,然後在換膚按鈕那裏動態傳參即可。

 

以上,即實現了皮膚/主題的動態切換。並且將各種樣式抽離爲獨立的變量實現解耦。避免了使用class造成全局與局部class衝突的問題以及class中多個樣式在不同主題間細微調整時的維護困難問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章