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项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
vuex的数据渲染与修改浅析
Nov 26 Vue.js
vue中defineProperty和Proxy的区别详解
Nov 30 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
vue实现轮播图帧率播放
Jan 26 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
vue整合百度地图显示指定地点信息
Apr 06 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
vue+elementUI实现表格列的显示与隐藏
Apr 13 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
PHP延迟静态绑定示例分享
2014/06/22 PHP
php提高网站效率的技巧
2015/09/29 PHP
php for 循环使用的简单实例
2016/06/02 PHP
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
关于js原型的面试题讲解
2016/09/25 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
Python+django实现文件上传
2016/01/17 Python
python适合人工智能的理由和优势
2019/06/28 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
New delete 与malloc free 的联系与区别
2013/02/04 面试题
民族团结好少年事迹材料
2014/08/19 职场文书
2015新学期开学寄语
2015/02/26 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
用Python生成会跳舞的美女
2022/01/18 Python