最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Vue2.0和Typescript實(shí)現(xiàn)多主題切換的示例

 更新時(shí)間:2023年04月20日 08:58:22   作者:syySummer48303  
本文主要介紹了基于Vue2.0和Typescript實(shí)現(xiàn)多主題切換的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

之前在項(xiàng)目中用了Sass的多主題切換,感覺太麻煩,后面發(fā)現(xiàn)直接用CSS的很方便,所以整理一下,希望可以幫到大家,也是對自己的積累。

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

colorConfig.ts文件的主要定義的內(nèi)容

 /**
 * 全局顏色配置項(xiàng),換膚配置
 * 主題名稱theme1以及對應(yīng)的顏色名稱color1后面根據(jù)實(shí)際主題名和顏色名進(jìn)行修改
 * 主題名稱和顏色名稱可以實(shí)際情況定義
 */

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

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


/**
 * 主題切換
 * @param theme 主題,默認(rèn)使用主題一
 */
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])
  })
}

第二步,根據(jù)接口獲取當(dāng)前主題信息,并進(jìn)行切換設(shè)置

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

第三步,切換主題時(shí),更新緩存

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

第四步, 頁面上使用css變量來動(dòng)態(tài)展示顏色值

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

效果圖如下圖所示

theme1.png

theme2.png

theme3.png

到此這篇關(guān)于基于Vue2.0和Typescript實(shí)現(xiàn)多主題切換的示例的文章就介紹到這了,更多相關(guān)Vue Typescript多主題切換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3自定義dialog、modal組件的方法

    vue3自定義dialog、modal組件的方法

    這篇文章主要介紹了vue3自定義dialog、modal組件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放詳細(xì)圖文教程

    vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放詳細(xì)圖文教程

    m3u8是一種常用的視頻流媒體格式,通常用于在Web上播放視頻,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目實(shí)現(xiàn)m3u8流媒體播放的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • 詳解vue axios二次封裝

    詳解vue axios二次封裝

    這篇文章給大家分享了vue axios二次封裝的相關(guān)知識點(diǎn)等內(nèi)容以及實(shí)例代碼,有興趣的朋友可以參考學(xué)習(xí)下。
    2018-07-07
  • vue+echarts動(dòng)態(tài)更新數(shù)據(jù)及數(shù)據(jù)變化重新渲染方式

    vue+echarts動(dòng)態(tài)更新數(shù)據(jù)及數(shù)據(jù)變化重新渲染方式

    這篇文章主要介紹了vue+echarts動(dòng)態(tài)更新數(shù)據(jù)及數(shù)據(jù)變化重新渲染方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue打印插件vue-print-nb的實(shí)現(xiàn)代碼

    vue打印插件vue-print-nb的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue打印插件vue-print-nb的實(shí)現(xiàn),需要引入插件npm install vue-print-nb --save,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • vue實(shí)現(xiàn)拖拽或點(diǎn)擊上傳圖片

    vue實(shí)現(xiàn)拖拽或點(diǎn)擊上傳圖片

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)拖拽或點(diǎn)擊上傳圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue動(dòng)態(tài)綁定background的方法

    vue動(dòng)態(tài)綁定background的方法

    background是background-color,background-image,background-repeat,background-attachment,background-position,background-size等屬性的縮寫,本文我用動(dòng)態(tài)綁定background-image來舉例,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Vue3.2.x中的小技巧及注意事項(xiàng)總結(jié)

    Vue3.2.x中的小技巧及注意事項(xiàng)總結(jié)

    Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架,是目前最火的前端框架之一,是前端工程師的必備技能,下面這篇文章主要給大家介紹了關(guān)于Vue3.2.x中的小技巧及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 如何監(jiān)聽Vue項(xiàng)目報(bào)錯(cuò)的4種方式?

    如何監(jiān)聽Vue項(xiàng)目報(bào)錯(cuò)的4種方式?

    本文主要介紹了如何監(jiān)聽Vue項(xiàng)目報(bào)錯(cuò)的4種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue實(shí)現(xiàn)信息管理系統(tǒng)

    vue實(shí)現(xiàn)信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評論

临泽县| 长岛县| 奉贤区| 大同县| 河源市| 呼伦贝尔市| 福安市| 土默特左旗| 海门市| 阿拉善右旗| 色达县| 维西| 河东区| 黎平县| 通渭县| 花莲市| 武城县| 云浮市| 邯郸市| 常熟市| 隆子县| 林周县| 海南省| 平谷区| 当涂县| 确山县| 密云县| 巫溪县| 克拉玛依市| 岳西县| 民乐县| 安义县| 宜川县| 张家港市| 巨鹿县| 凤城市| 巫山县| 旬阳县| 宁安市| 正阳县| 沅陵县|