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 的 v-model用法实例
Nov 23 Vue.js
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
vue组件中节流函数的失效的原因和解决方法
Dec 02 Vue.js
vue $router和$route的区别详解
Dec 02 Vue.js
基于vue+echarts数据可视化大屏展示的实现
Dec 25 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
vue3使用vuedraggable实现拖拽功能
Apr 06 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
vue判断按钮是否可以点击
Apr 09 Vue.js
vue打包时去掉所有的console.log
Apr 10 Vue.js
使用vue判断当前环境是安卓还是IOS
Apr 12 Vue.js
vue封装数字翻牌器
Apr 20 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
第三节 定义一个类 [3]
2006/10/09 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
33种Javascript 表格排序控件收集
2009/12/03 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
使用js画图之画切线
2015/01/12 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
python实现每次处理一个字符的三种方法
2014/10/09 Python
Python 递归函数详解及实例
2016/12/27 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python如何实现视频转代码视频
2019/06/17 Python
解决Python二维数组赋值问题
2019/11/28 Python
python绘制分布折线图的示例
2020/09/24 Python
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
旅游管理专业个人求职信范文
2013/12/24 职场文书
好的演讲稿开场白
2013/12/30 职场文书
会计学专业求职信
2014/07/17 职场文书
妈妈活动方案
2014/08/15 职场文书
员工给公司的建议书
2019/06/24 职场文书