• 使用ant-design-vue实现换肤功能


    1、安装ant-design-vue
     

    npm i ant-design-vue --save

    2、在main.js中引入

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

    3、安装antd-theme-generatorless插件
     

    1. npm i antd-theme-generator --save
    2. npm i less --save
    3. npm i less-loader --save


    4、在src目录下新建styles文件夹,里面新建index.less,variables.less文件
    variables.less内容

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

    index.less文件为空

    5、项目根目录下新建color.js文件

    1. const path = require('path')
    2. const { generateTheme } = require('antd-theme-generator')
    3. // ant-design-vue/dist/antd.less
    4. const options = {
    5. antDir: path.join(__dirname, './node_modules/ant-design-vue'), //node_modules中的antd目录的路径
    6. stylesDir: path.join(__dirname, './src/styles'), //对应具体位置
    7. varFile: path.join(__dirname, './src/styles/variables.less'), //与主题相关的变量文件的路径
    8. mainLessFile: path.join(__dirname, './src/styles/index.less'), //less主文件入口
    9. themeVariables: [ //动态更改的变量列表
    10. '@primary-color', //基础颜色
    11. '@secondary-color',
    12. '@text-color', //文本颜色,如果不更改,将会和primary-color保持一致
    13. '@text-color-secondary',
    14. '@heading-color',
    15. '@layout-body-background', //body背景色
    16. '@btn-primary-bg',
    17. '@layout-header-background'
    18. ],
    19. indexFileName: 'index.html',
    20. outputFilePath: path.join(__dirname, './public/color.less')//生成的less文件放入到指定位置,下面会用到此路径
    21. }
    22. generateTheme(options)
    23. .then(less => {
    24. console.log('Theme generated successfully')
    25. })
    26. .catch(error => {
    27. console.log('Error', error)
    28. })

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

    1. <link rel="stylesheet/less" type="text/css" href="/color.less" />
    2. <script>
    3. window.less = {
    4. async: true,
    5. env: 'production'
    6. };
    7. script>
    8. <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的启动和打包指令

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

    8、使用

    1. <template>
    2. <div>
    3. <div class="colorBlock" style="background:green" @click="changeColor('green')">div>
    4. <div class="colorBlock" style="background:red" @click="changeColor('red')">div>
    5. <div class="colorBlock" style="background:blue" @click="changeColor('blue')">div>
    6. <div class="colorBlock" style="background:yellow" @click="changeColor('yellow')">div>
    7. div>
    8. template>
    9. <script>
    10. export default {
    11. methods: {
    12. changeColor(color) {
    13. console.log(window.less)
    14. window.less
    15. .modifyVars({
    16. '@primary-color': color,
    17. '@link-color': color,
    18. '@btn-primary-bg': color
    19. })
    20. .then(() => {
    21. console.log('成功')
    22. })
    23. .catch(error => {
    24. alert('失败')
    25. console.log(error)
    26. })
    27. }
    28. }
    29. }

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

    ok,功能实现,结束。

     

  • 相关阅读:
    文件拷贝【 使用字节流完成文件的复制(支持一切文件类型的复制)】
    通过字符设备驱动分步注册方式编写LED驱动,完成设备文件和设备的绑定
    OLAP引擎也能实现高性能向量检索,据说QPS高于milvus!
    【数据结构与算法】图的介绍和程序实现(含深度优先遍历、广度优先遍历)
    1-氨丙基-3-甲基咪唑溴盐离子液体修饰碳量子点(L-CQDs)负载TiO2纳米颗粒(试剂)
    【MySQL 第十二天 事务的介绍|InnoDB使用事务】
    38.sed高级编辑命令
    PCBA涂覆三防漆的工作需要注意什么?
    听GPT 讲Istio源代码--pilot(4)
    盛元广通农业种子检测实验室信息化管理系统LIMS
  • 原文地址:https://blog.csdn.net/weixin_42232156/article/details/126146418