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 相关文章推荐
vue3.0中setup使用(两种用法)
Dec 02 Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
vue使用require.context实现动态注册路由
Dec 25 Vue.js
vue实现树状表格效果
Dec 29 Vue.js
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 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
如何使用PHP中的字符串函数
2006/10/09 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
php curl常用的5个经典例子
2017/01/20 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
Vue自定义指令详解
2017/07/28 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
js实现一个简易计算器
2020/03/30 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
python中函数传参详解
2016/07/03 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
tensorflow 查看梯度方式
2020/02/04 Python
python实现人像动漫化的示例代码
2020/05/17 Python
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
家长写给老师的建议书
2014/03/13 职场文书
法制宣传月活动总结
2014/04/29 职场文书
汽车专业求职信
2014/06/05 职场文书
音乐学专业求职信
2014/07/22 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
工作经历证明范本
2015/06/15 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python