亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Vue2.0和Typescript怎么實現多主題切換

發布時間:2023-04-21 16:14:54 來源:億速云 閱讀:121 作者:iii 欄目:開發技術

這篇“基于Vue2.0和Typescript怎么實現多主題切換”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“基于Vue2.0和Typescript怎么實現多主題切換”文章吧。

第一步: 需要創建一個colorConfig.ts文件,用于配置主題信息 (我創建的目錄是src/config/colorConfig.ts)

colorConfig.ts文件的主要定義的內容

 /**
 * 全局顏色配置項,換膚配置
 * 主題名稱theme1以及對應的顏色名稱color1后面根據實際主題名和顏色名進行修改
 * 主題名稱和顏色名稱可以實際情況定義
 */

const COLOR_MAP = {
   // 第一套主題顏色
  theme1: {
    color1: '#FFCDD2', // 主要背景
    color2: '#E1BEE7', // 文字顏色
    color3: '#70767f', // 按鈕顏色(灰色)
    color4: '#EF9A9A',
    color5: '#F06292', //彈框背景灰色
    color6: '#7986CB', //主要內容區域背景
    color7: '#64B5F6', //選中狀態
  },
  // 第二套主題顏色
  theme2: {
    color1: '#FF7043', // 主要背景
    color2: '#4E342E', // 文字顏色
    color3: '#263238', // 按鈕顏色(灰色)
    color4: '#FF6E40',
    color5: '#DD2C00', //彈框背景灰色
    color6: '#616161', //主要內容區域背景
    color7: '#212121', //選中狀態
  },
  // 第三套主題顏色
  theme3: {
    color1: '#E65100', // 主要背景
    color2: '#FF6D00', // 文字顏色
    color3: '#1B5E20', // 按鈕顏色(灰色)
    color4: '#827717',
    color5: '#00C853', //彈框背景灰色
    color6: '#0091EA', //主要內容區域背景
    color7: '#00BFA5', //選中狀態
  }
}

/**
 * 類型定義
 * 定義COLOR_MAP中的主題類型,及每個主題中顏色值的類型
 */
export type THEME_TYPE = keyof (typeof COLOR_MAP)
type THEME_ITEM = keyof (typeof COLOR_MAP['theme1'])


/**
 * 主題切換
 * @param theme 主題,默認使用主題一
 */
export function changeTheme (theme: THEME_TYPE = 'theme1'): void {
  const themeList = Object.keys(COLOR_MAP[theme]) as THEME_ITEM[]
  themeList.forEach((v: THEME_ITEM) => {
    document.body.style.setProperty(`--${v}`, COLOR_MAP[theme][v])
  })
}

第二步,根據接口獲取當前主題信息,并進行切換設置

 // 在App.vue中引入主題模塊
 import { changeTheme } from '@/config/colorConfig'
 
 // 在created讀取緩存信息
 created () {
   const theme = localStorage.getItem('theme') || 'theme1'
   // 將主題獲取到的主題存到vuex中,記錄當前的主題信息,默認主題一 theme1
   store.commit('common/setTheme', theme)
   changeTheme(theme)
   
   
   // 如果主題信息存儲在后端,此時需要獲取主題信息 (不建議使用)
   getThemeInfo()
 }
 
 /**
 * 主題信息也可以存儲在后端,定義獲取后臺存儲的主題信息的方法(不過不建議后端存主題信息,直接  localstorage就夠了,還能防止主題閃屏問題)
 */
  async getThemeInfo() {
      // 入參
      const requestData = {
        method: 'xxxx',
        params: { method: 'xxx' }
      }
      const response = await this.$axios({
        method: 'POST',
        url: `${this.$baseUrl}/xxxx/xxxx/`,
        data: requestData
      }).catch(() => {
        // 接口響應失敗默認主題一
        store.commit('common/setTheme', 'theme1')
        changeTheme('theme1')  
      })
      let { code, data } = response?.data || {}
      // 根據code碼獲取接口響應狀態
      if (code === '0000') {
        const theme = data?.theme
        // 將主題獲取到的主題存到vuex中,記錄當前的主題信息,默認主題一 theme1
        store.commit('common/setTheme', theme ? theme : 'theme1')
        changeTheme(theme ? theme : 'theme1')
      } else {
        // 接口響應失敗默認主題一
        store.commit('common/setTheme', 'theme1')
        changeTheme('theme1')
      }
    
}

第三步,切換主題時,更新緩存

  import { changeTheme, THEME_TYPE } from '@/config/colorConfig'
  
  // 主題切換
  themeChange(themeVal): void {
    changeTheme(themeVal as THEME_TYPE)
    store.commit('common/setTheme', themeVal)
    // 存儲到緩存中
    localStorage.setItem('theme', themeVal)
    
    // 也可以通過接口調用將themeVal,保存到后端
  }

第四步, 頁面上使用css變量來動態展示顏色值

  /*例如var(--color1)*/
  #app {
      width: 100%;
      height: 100%;
      background-color: var(--color1);
      box-sizing: border-box;
      color: var(--color2);
      font-size: 1rem;
   }

效果圖如下圖所示

基于Vue2.0和Typescript怎么實現多主題切換

基于Vue2.0和Typescript怎么實現多主題切換

基于Vue2.0和Typescript怎么實現多主題切換

以上就是關于“基于Vue2.0和Typescript怎么實現多主題切換”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜宾市| 灵寿县| 崇信县| 尉犁县| 铜山县| 宝丰县| 崇阳县| 晋江市| 宜兰县| 扎囊县| 上栗县| 萝北县| 云龙县| 龙泉市| 台东县| 鹤峰县| 肥西县| 长武县| 鱼台县| 神池县| 洪湖市| 贵定县| 宣武区| 栖霞市| 永胜县| 红河县| 亚东县| 库车县| 宜兰县| 玛多县| 旬邑县| 乐山市| 漳州市| 津南区| 陆河县| 涟源市| 东乌珠穆沁旗| 峡江县| 巴林左旗| 汉寿县| 金平|