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编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vue中defineProperty和Proxy的区别详解
Nov 30 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
vue绑定class的三种方法
Dec 24 Vue.js
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
vue+element ui实现锚点定位
Jun 29 Vue.js
vue中的可拖拽宽度div的实现示例
Apr 08 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中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
jquery学习笔记之无new构建详解
2017/12/07 jQuery
JS中的BOM应用
2018/02/02 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
js验证密码强度解析
2020/03/18 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
详解Appium+Python之生成html测试报告
2019/01/04 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
附答案的Java面试题
2012/11/19 面试题
2013年保送生自荐信格式
2013/11/20 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
广告设计应届生求职信
2014/03/01 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
党员作风建设自查报告
2014/10/23 职场文书
联村联户简报
2015/07/21 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
MySQL中连接查询和子查询的问题
2021/09/04 MySQL