vue中换肤

  项目中期的时候,大佬对项目的色彩不满意,要求更换,这样产品就提出了需求,要求可以根据用户自己的需求去自己切换主题色;这边根据产品提供的几种颜色,看了下网上的博客,一开始我以为可以只引入一个css文件,然后像js一样提出一个变量改变这个变量就可以的,但是看到后期,发现css文件还是要准备多个。(如果有哪个亲能可以这样实现,希望能告知我一下,让我也见识下)

  这里我引入了sass,因为我可以在一个css文件中编写相关的样式代码,将需要的变量提出来,最后每次更改都可以只改变相应的变量值,然后自动生成相应的文件,我是把文件内容拷贝出来,放到vue的static静态目录下,新建了皮肤的skin文件夹,每个颜色弄了一个css文件,(因为sass需要安装ruby和sass相关插件才能生成css,所以需要开发的时候生成相应的css,不能在线编译,所以要引入多个css文件)引用sass就是统一编译处理,因为后期更改css工作量太大,为了提高工作效率和正确率才这样做的。

   我利用了elementUI的下拉菜单组件在项目的header头部组件中定义了颜色切换的下拉状态选择(公司内网,不能登录截图给大家看,你们可以去element看下拉的样式,脑补一下下,抱歉);

          

<el-dropdown trigger="hover" @command="changeColor">
  <span class="el-dropdown-link">/*选中的颜色*/</span>
    <el-dropdown-menu slot="dropdown">
        <el-dropdown-item command="0" name="green" style="background: green"> </el-dropdown-item>
        <el-dropdown-item command="1" name="pink" style="background: pink"> </el-dropdown-item>
        <el-dropdown-item command="2" name="#ffa737" style="background: #ffa737"> </el-dropdown-item>
    </el-dropdown-menu>
</el-dropdown>

上面@command事件的

changeColor是切换肤色的方法,需要写在methods里面;这变项目中引入了vuex,所以为了方便多个组件共享数据状态,我把用户选择的颜色状态存储到了vuex中,(这个状态只能在
该用户登录时,对此次进行操作,对于永久保存状态的话就需要后台配合,去存储了,但是这个其实没有必要,还是看你们的项目要求吧);vue的data中声名变量themeStyle:this.$store.state.themeColor;
vuex里给了初始颜色值

我在index.html页面引入了默认的css,<link rel="stylesheet" href="static/skin/green.css" class="theme">;这里必须要给class,这样为下面的代码切换css保证页面
替换只引入了一个css,不然页面会重复引入多个
 changeColor(command){
            this.themeStyle = command;
            let theme = document.getElementsByClassName('theme')[0];
            if( this.themeStyle == 0){
                theme.setAttribute('href','static/skin/green.css');
                this.$store.commit('getThemeColor',0); /*把颜色存储到vuex*/
                document.getElementsByClassName('el-dropdown-link')[0].style.backgroundColor = 'green'
            }else if( this.themeStyle == 1){
                theme.setAttribute('href','static/skin/pink.css');
                this.$store.commit('getThemeColor',1);
                document.getElementsByClassName('el-dropdown-link')[0].style.backgroundColor = 'pink'
            }...
        }

当然初始化的时候也是要判断

   这是为了让用户切换肤色,退出后vuex还存储着颜色状态,再登入后选中的颜色还是显示相应的

mounted(){
 if( this.themeStyle == 0){
                document.getElementsByClassName('el-dropdown-link')[0].style.backgroundColor = 'green'
            }else if( this.themeStyle == 1){
                document.getElementsByClassName('el-dropdown-link')[0].style.backgroundColor = 'pink'
            }...
}

这样大多都完成了,只要提取主题色的css即可。感谢阅读,如果有哪怕一点点的指点都可以给我留言,我会好好学的。本人技拙,小乌龟慢慢爬,嘻嘻。。

学习之余,也要享受生活,最近刷完了镇魂,喜欢沈巍,上得厅堂,下得厨房,国名好老公,嘻嘻,推荐片尾曲《只是太在意》,好听~

    

转载于:https://www.cnblogs.com/QIQIZAIXIAN/p/9437343.html

Vue 和 Sass 结合可以方便地实现网站的主题切换或换肤功能,也就是我们通常所说的“皮肤”或“样式主题”。以下是基本步骤: 1. 安装依赖:首先在 Vue 项目安装 SCSS 的处理工具,如 `node-sass` 和 `sass-loader`。对于 Vue CLI 项目,可以在 `package.json` 添加依赖项,并运行 `npm install` 或 `yarn add`。 ```json // package.json { "dependencies": { "node-sass": "^5.0.0", "sass-loader": "^14.0.1" } } ``` 2. 配置构建:在 `vue.config.js` 文件配置 CSS 的处理方式,启用 SASS 加载器。 ```javascript module.exports = { css: { loaderOptions: { sass: { includePaths: ['src/assets/sass'], // 指定 SCSS 文件的位置 }, }, }, }; ``` 3. 创建主题文件:在指定目录(如 `src/assets/sass/themes`)下创建不同的 SCSS 主题文件,例如 `light-theme.scss` 和 `dark-theme.scss`。每个主题文件应包含变量、颜色、布局等样式设定。 ```scss // light-theme.scss $primary-color: #fff; $background-color: #f8f9fa; // dark-theme.scss $primary-color: #343a40; $background-color: #282c34; ``` 4. 使用主题变量:在 Vue 组件引入主题变量并应用到样式。通过计算属性动态选择当前激活的主题。 ```html <style scoped> @import '~@/assets/sass/themes/{{ activeTheme }}'; .app { background-color: $background-color; } /* ... */ </style> <script setup> import { ref } from 'vue'; import { activeTheme } from '@/store/theme'; // 假设主题状态保存在 store const selectedTheme = ref(activeTheme); </script> ``` 5. 主题管理:在 Vuex 设置主题状态和切换逻辑,用户可以通过按钮或其他交互触发主题切换。 ```js // src/store/theme.js export const state = () => ({ activeTheme: 'light', }); export const mutations = { setTheme(state, theme) { state.activeTheme = theme; }, }; // ...触发切换的函数 export function switchTheme({ commit }, theme) { commit('setTheme', theme); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值