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

基于element-ui?動態(tài)換膚的代碼詳解

 更新時間:2022年03月29日 16:06:19   作者:rogerwu  
這篇文章主要介紹了element-ui?動態(tài)換膚,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、在安裝好element-ui@2.x 以后,首先安裝sass-loader

npm i sass-loader node-sass -D

2、安裝element-theme

npm i element-theme -D

3、安裝theme-chalk

npm i element-theme-chalk -D
# or from github
npm i https://github.com/ElementUI/theme-chalk -D

4、初始化變量文件

et -i // 默認的文件是element-variables.scss,也可以自定義文件名 et --init [file path]

安裝成功以后,在項目里會自動生成一個element-variables.scss 文件,如下圖:

里面定義的是所有的顏色變量

當(dāng)然,這一步也有可能失敗,命令行提示找不到et 這個命令。這個時候需要按照步驟一,重新裝一下sass-loader

5、修改變量

直接編輯 element-variables.scss 文件,例如修改主題色為紅色

6、編譯主題

保存文件后,到命令行里執(zhí)行 et 編譯主題,如果你想啟用 watch 模式,實時編譯主題,增加 -w 參數(shù);如果你在初始化時指定了自定義變量文件,則需要增加 -c 參數(shù),并帶上你的變量文件名

此時,項目中會自動生成一個theme文件夾,里面是編譯后所有的字體文件和樣式文件

7、引入自定義主題

默認情況下編譯的主題目錄是放在 ./theme 下,你可以通過 -o 參數(shù)指定打包目錄。像引入默認主題一樣,在代碼里直接引用 theme/index.css 文件即可。

import '../theme/index.css'
import ElementUI from 'element-ui'
import Vue from 'vue'

Vue.use(ElementUI)

啟動項目,會發(fā)現(xiàn)原來默認的藍色會變成紅色

 

官網(wǎng)提供的這種方法僅適用于一次性的更改全局主題顏色,如果想實現(xiàn)官網(wǎng)2.0版本右上角,使用 ColorPicker 顏色選擇器 動態(tài)換膚。那么建議參考vue-element-admin,作者的 《手摸手,帶你用vue擼后臺》系列文章非常精彩

ThemePicker.vue
<template>
  <el-tooltip effect="dark" content="theme" placement="bottom">
    <el-color-picker
    v-model="theme"
    class="theme-picker"
    size="small"
    popper-class="theme-picker-dropdown"/>
  </el-tooltip>
</template>
<script>
const version = require('element-ui/package.json').version // element-ui version from node_modules
const ORIGINAL_THEME = '#409EFF' // default color
export default {
  data() {
    return {
      chalk: '', // content of theme-chalk css
      theme: ORIGINAL_THEME
    }
  },
  watch: {
    theme(val, oldVal) {
      if (typeof val !== 'string') return
      const themeCluster = this.getThemeCluster(val.replace('#', ''))
      const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
      console.log(themeCluster, originalCluster)
      const getHandler = (variable, id) => {
        return () => {
          const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))
          const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)
          let styleTag = document.getElementById(id)
          if (!styleTag) {
            styleTag = document.createElement('style')
            styleTag.setAttribute('id', id)
            document.head.appendChild(styleTag)
          }
          styleTag.innerText = newStyle
        }
      }
      const chalkHandler = getHandler('chalk', 'chalk-style')
      if (!this.chalk) {
        const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`
        this.getCSSString(url, chalkHandler, 'chalk')
      } else {
        chalkHandler()
      const styles = [].slice.call(document.querySelectorAll('style'))
        .filter(style => {
          const text = style.innerText
          return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text)
        })
      styles.forEach(style => {
        const { innerText } = style
        if (typeof innerText !== 'string') return
        style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)
      })
      this.$message({
        message: '換膚成功',
        type: 'success'
  methods: {
    updateStyle(style, oldCluster, newCluster) {
      let newStyle = style
      oldCluster.forEach((color, index) => {
        newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])
      return newStyle
    },
    getCSSString(url, callback, variable) {
      const xhr = new XMLHttpRequest()
      xhr.onreadystatechange = () => {
        if (xhr.readyState === 4 && xhr.status === 200) {
          this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')
          callback()
      xhr.open('GET', url)
      xhr.send()
    getThemeCluster(theme) {
      const tintColor = (color, tint) => {
        let red = parseInt(color.slice(0, 2), 16)
        let green = parseInt(color.slice(2, 4), 16)
        let blue = parseInt(color.slice(4, 6), 16)
        if (tint === 0) { // when primary color is in its rgb space
          return [red, green, blue].join(',')
        } else {
          red += Math.round(tint * (255 - red))
          green += Math.round(tint * (255 - green))
          blue += Math.round(tint * (255 - blue))
          red = red.toString(16)
          green = green.toString(16)
          blue = blue.toString(16)
          return `#${red}${green}${blue}`
      const shadeColor = (color, shade) => {
        red = Math.round((1 - shade) * red)
        green = Math.round((1 - shade) * green)
        blue = Math.round((1 - shade) * blue)
        red = red.toString(16)
        green = green.toString(16)
        blue = blue.toString(16)
        return `#${red}${green}${blue}`
      const clusters = [theme]
      for (let i = 0; i <= 9; i++) {
        clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
      clusters.push(shadeColor(theme, 0.1))
      return clusters
  }
}
</script>
Navbar.vue
<template>
  <el-menu class="navbar" mode="horizontal">
    <hamburger 
      class="hamburger-container"
      :toggleClick="toggleSideBar"
      :isActive="!sidebar.opened">
    </hamburger>
    <div class="right-menu">
      <screenfull class="screenfull"></screenfull>
      <div class="lang">
        <el-dropdown>
          <i class="iconfont icon-language4"></i>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item @click.native="toggleLang('zh')" :disabled="$i18n.locale == 'zh'">中文</el-dropdown-item>
            <el-dropdown-item @click.native="toggleLang('en')" :disabled="$i18n.locale == 'en'">English</el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
      </div>
      <theme-picker></theme-picker>
    </div>
  </el-menu>
</template>

以上demo代碼地址:https://github.com/frwupeng517/element-admin

Element-UI 官方文檔地址:http://element-cn.eleme.io/#/zh-CN/component/custom-theme

PanJiachen Git地址:https://github.com/PanJiaChen/vue-element-admin

到此這篇關(guān)于element-ui 動態(tài)換膚的文章就介紹到這了,更多相關(guān)element-ui 動態(tài)換膚內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript立即執(zhí)行函數(shù)與函數(shù)劫持的作用

    JavaScript立即執(zhí)行函數(shù)與函數(shù)劫持的作用

    IIFE全拼Imdiately Invoked Function Expression,是一個在定義的時候就立即執(zhí)行的JavaScript函數(shù),這篇文章主要給大家介紹了關(guān)于Javascript立即執(zhí)行函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 微信小程序如何監(jiān)聽全局變量

    微信小程序如何監(jiān)聽全局變量

    這篇文章主要給大家介紹了關(guān)于微信小程序如何監(jiān)聽全局變量的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • JavaScript代碼編寫中各種各樣的坑和填坑方法

    JavaScript代碼編寫中各種各樣的坑和填坑方法

    這篇文章主要介紹了JavaScript代碼編寫中各種各樣的坑和填坑方法,相信你肯定遇到過這些陷阱,而且陷入過,本文共計介紹了5種坑和填坑方法,需要的朋友可以參考下
    2014-06-06
  • 了解一點js的Eval函數(shù)

    了解一點js的Eval函數(shù)

    之前只知道eval可以解析字符串,剛剛網(wǎng)上看了又了解了一點,這里貼出來,不懂的也看看哈
    2012-07-07
  • web打印小結(jié)

    web打印小結(jié)

    本文主要介紹了一款比較強大的web打印工具lodop實現(xiàn)將winform客戶端的打印,移到網(wǎng)頁上由客戶自行打印,打印要求是根據(jù)一定的格式實現(xiàn)套打的過程與方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 一組JS創(chuàng)建和操作表格的函數(shù)集合

    一組JS創(chuàng)建和操作表格的函數(shù)集合

    在用AJAX的時候,經(jīng)常要用JS操作DOM,當(dāng)涉及到數(shù)據(jù)列表的時候,那用表格比較多,這里寫了組函數(shù)集合,專門用來操作表格,當(dāng)然,目前還有很多不足,但是對一些簡單操作還是很方便的。
    2009-05-05
  • 深入淺析Extjs中store分組功能的使用方法

    深入淺析Extjs中store分組功能的使用方法

    這篇文章主要介紹了深入淺析Extjs中store分組功能的使用方法的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • javascript搜索框效果實現(xiàn)方法

    javascript搜索框效果實現(xiàn)方法

    這篇文章主要介紹了javascript搜索框效果實現(xiàn)方法,可實現(xiàn)顯示默認提示文字的搜索框效果,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • 淺析JavaScript 調(diào)試方法和技巧

    淺析JavaScript 調(diào)試方法和技巧

    本文給大家淺析javascript調(diào)試方法和技巧,涉及到j(luò)avascript調(diào)試方法和技巧方面的知識,本文介紹的非常詳細,非常具有參考借鑒介紹,感興趣的朋友一起看看吧
    2015-10-10
  • 用原生JS實現(xiàn)愛奇藝首頁導(dǎo)航欄代碼實例

    用原生JS實現(xiàn)愛奇藝首頁導(dǎo)航欄代碼實例

    這篇文章主要介紹了用原生JS實現(xiàn)愛奇藝首頁導(dǎo)航欄代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09

最新評論

富裕县| 陵川县| 枝江市| 阜城县| 城步| 宜章县| 翼城县| 尉氏县| 远安县| 昭通市| 荃湾区| 敦化市| 巩义市| 平原县| 修水县| 孟州市| 禹城市| 克山县| 乐亭县| 咸阳市| 杂多县| 乳源| 宁南县| 封开县| 邵阳市| 泰兴市| 商都县| 杂多县| 湖北省| 五原县| 封开县| 黄骅市| 宣武区| 蓝田县| 仙桃市| 高碑店市| 荥经县| 封开县| 手游| 县级市| 金溪县|