当前位置:   article > 正文

vue项目动态换皮肤/换主题的通用实现方式(热换肤,无需重启项目,通俗易懂,看了就会!!!)_vue换肤动态换图片

vue换肤动态换图片

VUE项目动态切换皮肤/主题的通用实现方式

 

提供一种通用的的解决方案,无需重启项目,无需更改import的文件路径,直接通过功能按钮热更换皮肤/主题

 

vue-cli版本:3.0

 

1. 在pulic目录下创建skin目录,新建day.css和night.css两个主题样式文件,并在其中声明css变量

day.css

  1. /*日间模式*/
  2. :root {
  3. --bgColor: white;
  4. --fontColor: black;
  5. }

night.css

  1. /*日间模式*/
  2. :root {
  3. --bgColor: black;
  4. --fontColor: white;
  5. }

 

2. 找到index.html总入口文件,使用link标签引入css文件

在这里引入的样式即全局样式,所有子组件可以直接使用

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width,initial-scale=1.0">
  7. <!--皮肤-->
  8. <link id="skin" rel="stylesheet" type="text/css" href="/skin/day.css">
  9. </head>
  10. <body>
  11. <div id="app"></div>
  12. </body>
  13. </html>

 

3. 为项目中的换肤按钮绑定换肤事件,传入不同的参数,从而动态改变link标签的href属性

  1. // type为night或者day
  2. changeSkin (type) {
  3. // 节流防止疯狂点击
  4. if (change) {
  5. clearTimeout(change)
  6. }
  7. let change = setTimeout(() => {
  8. document.head.querySelector('#skin').setAttribute('href', `/skin/${type}.css`)
  9. }, 100)
  10. }

 

4. 在需要控制皮肤样式的组件中,直接使用night.css或者day.css中声明的全局变量即可

  1. .content-xxxx {
  2. background-color: var(--bgColor);
  3. color: var(--fontColor);
  4. }

 

注意:一般的换肤业务中,night.css与day.css中的变量名称与数量应该相同,具体的样式根据主题风格进行各自定义,

想要添加其他风格,新增xxx.css主题文件,然后在换肤按钮那里动态传参即可。

 

以上,即实现了皮肤/主题的动态切换。并且将各种样式抽离为独立的变量实现解耦。避免了使用class造成全局与局部class冲突的问题以及class中多个样式在不同主题间细微调整时的维护困难问题。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/109002
推荐阅读
相关标签
  

闽ICP备14008679号