VUE项目实现主题切换的多种方法


Posted in Vue.js onNovember 26, 2020

需求是 做一个深色主题和浅色主题切换的效果

方法一 多套css

这个方法也是最简单,也是最无聊的。

<!-- 中心 -->
<template>
 动态获取父级class名称,进行一个父级class的多次定义
 <div :class="className">
 <div class="switch" v-on:click="chang()">
  {{ className == "box" ? "开灯" : "关灯" }}
 </div>
 </div>
</template>
<script>
export default {
 name: "Centre",
 data() {
 return {
  className: "box"
 };
 },
 methods: {
 // 改变class
 chang() {
  this.className === "box"
  ? (this.className = "boxs") 
  : (this.className = "box");
 }
 },
};
</script>
<style lang="scss">
当class为box 使用witch的css
@import "./style/witch.scss";
当class为boxs 使用black的css
@import "./style/black.scss";
.switch {
 position: fixed;
 top: 4px;
 right: 10px;
 z-index: 50;
 width: 60px;
 height: 60px;
 background: #fff;
 line-height: 60px;
 border-radius: 20%;
}
</style>

每个css文件样式大致相同,只是最外层的父级不一样,分别为.box 和.boxs

方法二 scss动态切换变量

我自己是分为了2个主要文件来做的

_variable.scss 变量管理文件
var()为css3中提出的声明样式变量的方法
var(属性名,属性值)注意属性值不能是字符串

// 主题切换
$bgColor:var(--backgroundColor,rgb(255,255,255));
$fontColor:var(--fonntColor,rgb(0,0,0));
$bgmColor:var(--backgroundMColor,rgb(238,238,238));
$tableColor:var(--tableColor,rgb(218,218,218));
$borderColor:var(--borderColor,rgb(238,238,238));
$tablesColor:var(--tablesColor,rgb(255,255,255));
$inputColor:var(--inputColor,rgb(255,255,255))

创建的_variable.scss 文件我在vue.config.js进行了一个全局的配置,没有在组件中引入

css: {
 loaderOptions: {
  // 此文件为主题切换文件
  sass: {
  prependData: `@import "./src/styles/_variable.scss";`,
  },
 },
 },

2.publicStyle.js
这个方法可以去修改var定义的变量
document.getElementsByTagName("body")[0].style.setProperty("属性名", "替换的属性值f");

// 主题切换
const cut = (cutcheack) => {
 document.getElementsByTagName("body")[0].style.setProperty("--backgroundColor", cutcheack ? "#121212" : "#fff");
 document.getElementsByTagName("body")[0].style.setProperty("--fonntColor", cutcheack ? "#cecece" : "#333");
 document.getElementsByTagName("body")[0].style.setProperty("--backgroundMColor", cutcheack ? "#333" : "#eee");
 document.getElementsByTagName("body")[0].style.setProperty("--tableColor", cutcheack ? "#000" : "#d8d8d8");
 document.getElementsByTagName("body")[0].style.setProperty("--tablesColor", cutcheack ? "#222" : "#fff");
 document.getElementsByTagName("body")[0].style.setProperty("--inputColor", cutcheack ? "#666" : "#fff");
 document.getElementsByTagName("body")[0].style.setProperty("--borderColor", cutcheack ? "#666" : "#fff");
};
export default cut;

组件中使用

<!-- 首页 -->
<template>
<div class='home'>
  <el-switch v-model="cutcheack" active-color="#333" inactive-color="#13ce66" active-text="主题" @change="switchs"></el-switch>
</div>
</template>
<script>
import cut from "../../utils/publicStyle.js";
export default {
 name: "Home",
 data() {
 return {
  cutcheack: false, //主题切换
 };
 },
 methods: {
 // 左侧导航隐藏或显示
 // 切换主题
 switchs() {
  cut(this.cutcheack);
 },
 },
};
</script>
<style lang='scss' scope>
.home {
 height: 100%;
 width: 100%;
	background:$bgColor;
 .el-container {
  height: 100%;
  color:$fontColor;
 }
}
</style>

到此这篇关于VUE项目实现主题切换的文章就介绍到这了,更多相关VUE 实现主题切换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
Vue Elenent实现表格相同数据列合并
Nov 30 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
vue实现树状表格效果
Dec 29 Vue.js
如何在 Vue 表单中处理图片
Jan 26 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
vue实现登陆页面开发实践
May 30 Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 Vue.js
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 #Vue.js
vue实现广告栏上下滚动效果
Nov 26 #Vue.js
Vue组件生命周期运行原理解析
Nov 25 #Vue.js
vue element-ul实现展开和收起功能的实例代码
Nov 25 #Vue.js
在Vue中使用mockjs代码实例
Nov 25 #Vue.js
Vue3配置axios跨域实现过程解析
Nov 25 #Vue.js
Vue使用Element实现增删改查+打包的步骤
Nov 25 #Vue.js
You might like
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
如何在PHP中使用数组
2020/06/09 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
jQuery 选择器理解
2010/03/16 Javascript
node.js入门教程
2014/06/01 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
学习python处理python编码问题
2011/03/13 Python
python简单程序读取串口信息的方法
2015/03/13 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python pandas常用函数详解
2018/02/07 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
python的pstuil模块使用方法总结
2019/07/26 Python
python内存管理机制原理详解
2019/08/12 Python
MySQL面试题目集锦
2016/04/14 面试题
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
党员干部承诺书
2014/03/25 职场文书
产品质量承诺书
2014/03/27 职场文书
公司周年庆典标语
2014/10/07 职场文书
合作协议书范本
2014/10/25 职场文书
财务部会计岗位职责
2015/02/03 职场文书
航班延误投诉信
2015/07/02 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
家电创业计划书
2019/08/05 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
Python中的程序流程控制语句
2022/02/24 Python