使用ant-design-vue开发换肤功能

1、安装ant-design-vue
npm i ant-design-vue --save
2、在main.js中引入

    `import Antd from 'ant-design-vue'`
    `import 'ant-design-vue/dist/antd.less'`  //这里注意一定要引入`.less`,如果引入`.css`的话,不能更改less变量,就无法实现换肤。
    `Vue.use(Antd)`

3、安装antd-theme-generatorless插件
npm i antd-theme-generator --save
npm i less --save
npm i less-loader --save
4、在src目录下新建styles文件夹,里面新建index.less,variables.less文件
variables.less内容

@import '~ant-design-vue/es/style/themes/default.less';  //引入默认less样式文件
@link-color: #00375b;
@primary-color: rgb(138, 164, 182); //默认基础色
:root {
  --PC: @primary-color; ///www.greatytc.com/color.less中加入css原生变量:--PC
}
.primary-color {
  color: @primary-color;  //后期换肤修改基础色就是在这里
}

index.less文件为空
5、项目根目录下新建color.js文件

const path = require('path')
const { generateTheme } = require('antd-theme-generator')
// ant-design-vue/dist/antd.less
const options = {
  antDir: path.join(__dirname, './node_modules/ant-design-vue'), //node_modules中的antd目录的路径
  stylesDir: path.join(__dirname, './src/styles'), //对应具体位置
  varFile: path.join(__dirname, './src/styles/variables.less'), //与主题相关的变量文件的路径
  mainLessFile: path.join(__dirname, './src/styles/index.less'), //less主文件入口
  themeVariables: [ //动态更改的变量列表
    '@primary-color',  //基础颜色
    '@secondary-color',
    '@text-color',  //文本颜色,如果不更改,将会和primary-color保持一致
    '@text-color-secondary',
    '@heading-color',
    '@layout-body-background',  //body背景色
    '@btn-primary-bg',
    '@layout-header-background'
  ],
  indexFileName: 'index.html',
  outputFilePath: path.join(__dirname, './public//www.greatytc.com/color.less')//生成的less文件放入到指定位置,下面会用到此路径
}
generateTheme(options)
  .then(less => {
    console.log('Theme generated successfully')
  })
  .catch(error => {
    console.log('Error', error)
  })

6、在publish文件夹下index.html文件中添加以下行,必须添加到body

<link rel="stylesheet/less" type="text/css" href="//www.greatytc.com/color.less" />
<script>
  window.less = {
    async: true,
    env: 'production'
  };
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/less.js/2.7.2/less.min.js"></script>//即时已经安装过less插件,此处仍需要引入此文件,否则会报错 Error in v-on handler: "TypeError: window.less.modifyVars is not a function"

7、修改package.json的启动和打包指令

"dev": "node color && vue-cli-service serve --open",
"build": "node color && vue-cli-service build",

8、使用

<template>
  <div>
    <div class="colorBlock" style="background:green" @click="changeColor('green')"></div>
    <div class="colorBlock" style="background:red" @click="changeColor('red')"></div>
    <div class="colorBlock" style="background:blue" @click="changeColor('blue')"></div>
    <div class="colorBlock" style="background:yellow" @click="changeColor('yellow')"></div>
  </div>
</template>
<script>
  export default {
   methods: {
    changeColor(color) {
      console.log(window.less)
      window.less
        .modifyVars({
          '@primary-color': color,
          '@link-color': color,
          '@btn-primary-bg': color
        })
        .then(() => {
          console.log('成功')
        })
        .catch(error => {
          alert('失败')
          console.log(error)
        })
    }
  }
}
<style lang="less" scoped>
.main {
  display: flex;
}
.colorBlock{
  margin-left: 10px;
  width: 30px;
  height: 30px;
}
</style>

原理:通过window.less.modifyVars方法,去动态的改变less变量。然后在调用color.js,在pulish中生成一个color.less文件,在index.html中重新引入一下,就实现了动态换肤功能。

ok,功能实现,结束。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348