CSS_scss切换主题

目录assets/theme以下新建文件

_handle.scss

@import './_themes.scss';// 定义混合指令, 切换主题,并将主题中的所有规则添加到theme-map中
@mixin themify() {// 将themes中规则放入theme-map@each $theme-name,$theme-map in $themes {$theme-map: $theme-map  !global;[data-theme="#{$theme-name}"] & {// 表示包含下面函数 themed(), 类似于插槽@content;$theme-map : null !global;}}
}@function themed($key) {@return map-get($theme-map, $key);
}

_themes.scss

$themes: (
light:(main_background: #fff,text_color: #333,text_color1: #868C9A,text_color2: #868C9A,text_color3: #000000, //tab_background: #F5F5F5,tab_background1: #fff, //tab_background2: #868C9A, //active_line: #00D6CA,footer_background: #fff,btn_main: #00D6CA,color_main: #00D6CA,btn_background: #00D6CA, //按钮颜色btn_background1: #eff7ff, //按钮颜色btn_background2: #C8CAD2, //按钮颜色input_background: #F5F5F5,cont_background: #f6f6f6,
),
dark:(main_background: #121212, //主题色text_color: #fff, //文字颜色text_color1: #868D9A, //文字浅色text_color2: #fff, // 资金页面所用对应text_color3: #fff, //tab_background: #242424, //tab切换背景颜色tab_background1: #000, //tab切换背景颜色tab_background2: #242424, //tab切换背景颜色active_line: #00D6CA, //tab选中样式颜色footer_background: #1a1a1a, // 底部颜色btn_main: #00D6CA, //主题色按钮color_main: #00D6CA, //主题色文字btn_background: #474B62, //按钮颜色btn_background1: #112542, //按钮颜色btn_background2: #1B2134, //按钮颜色input_background: #242424, //input背景颜色cont_background: #242424, //title背景色
))

index.scss

@import './_handle.scss';.mainBackground {@include themify() {background: themed("main_background") !important;}
}.textColor {@include themify() {color: themed("text_color") !important;}
}

修改vue.config.js文件

const scss_path = `@/assets/theme/index.scss`module.exports = defineConfig({css: {loaderOptions: {scss: {additionalData: `@import "${scss_path}";`},}},
})

app.vue设置默认主题

mounted() {window.document.documentElement.setAttribute('data-theme', '替换本地存储的theme')
},

状态管理设置点击设置主题

// 获取localStorage
const getStorage = function (key) {const str = window.localStorage.getItem(key)if (!str) {return null}return JSON.parse(str)
}// 移除localStorage
const removeStorage = function (key) {window.localStorage.removeItem(key)
}
// 设置sessionStorage
const setSessionStorage = function (key, obj) {let json = JSON.stringify(obj)window.sessionStorage.setItem(key, json)// console.log('设置语言', key, json)
}const changeTheme = (theme) => {if ((navigator.userAgent).indexOf('Html5Plus') > -1) {if (theme == 'light') {plus.navigator.setStatusBarBackground('#ffffff');plus.navigator.setStatusBarStyle('dark'); // 只能是dark 和 light} else {plus.navigator.setStatusBarBackground('#121212');plus.navigator.setStatusBarStyle('light'); // 只能是dark 和 light}} else {let meta = document.querySelector('meta[name="theme-color"]');if (theme == 'light') {meta.setAttribute('content', '#fff');} else {meta.setAttribute('content', '#121212');}}
}export default {state: {theme: getStorage('theme') || 'light'},getters: {theme: state => state.theme},mutations: {SET_THEME: (state, theme) => {state.theme = themewindow.document.documentElement.setAttribute('data-theme', theme)changeTheme(theme)setStorage('theme', theme)},
}

使用

import { mapGetters, mapMutations } from "vuex";export default {data() {return {}},computed: {...mapGetters('theme')},methods: {...mapMutations('SET_THEME'),changeModel(type) {this.type = type;this.SET_THEME(type)},/* changeModel() {let type = ''if (this.theme == 'light') {type = 'dark'} else {type = 'light'}this.SET_THEME(type)}, */}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么办,孟德尔随机化连锁不平衡跑不了!这里有本地连锁不平衡分析方法

大家都知道,孟德尔随机化很大程度依赖于国外的服务器。 最近我们发现孟德尔随机化常用的TwoSampleMR包的clump函数经常报错,这是由于服务器访问人群超时造成的现象,当线上版本失效。 很多人做孟德尔随机化,就卡在clump上。 于是我…

OpenStack云计算(十)——OpenStack虚拟机实例管理,增加一个计算节点并进行实例冷迁移,增加一个计算节点的步骤,实例冷迁移的操作方法

项目实训一 本实训任务对实验环境要求较高,而且过程比较复杂,涉及的步骤非常多,有一定难度,可根据需要选做。可以考虑改为直接观看相关的微课视频 【实训题目】 增加一个计算节点并进行实例冷迁移 【实训目的】 熟悉增加一个…

vue-router源码解析

vue-router简介 vue-router工作原理: url改变触发监听事件 (原理见路由模式)改变vue-router里面的current变量vue监听current的监听者获取到新的组件render新组件 vue-router如何实现无刷新页面切换: 采用某种方式使url发生改变。这种方式可能是调用HTML5 history API实现,…

Visual Studio Code 快捷键大全

文章目录 1. 全局快捷键2. 基本编辑3. 导航4. 查找 & 替换5. 多光标 & 选择6. 代码编辑7. 编辑器管理8. 文件管理9. 显示10. Debug 调试11. 终端(Terminal) 1. 全局快捷键 快捷键说明Ctrl Shift P,F1显示命令面板Ctrl P快速打开&am…

牛客NC199 字符串解码【中等 递归,栈的思想 C++/Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/4e008fd863bb4681b54fb438bb859b92 相同题目: https://www.lintcode.com/problem/575 思路 解法和基础计算器1,2,3类似,递归参考答案C struct Info {string str;int stopindex;Info(str…

AOC vs. DAC:哪个更适合您的网络需求?

在现代网络通信中,选择合适的连接线缆对于数据传输的稳定性和速度至关重要。两种常见的线缆类型是 AOC(Active Optical Cable) 和 DAC(Direct Attach Cable)。本文将详细介绍这两种线缆的特点、优势和适用场景&#xf…

Aigtek:介电弹性体高压放大器在软体机器人研究中的应用

近年来软体机器人的研究成为目前机器人研究领域的热点,由于软体材料的自由度可以根据需求自由变化,因此软体机器人有着极高的灵活性,而且软体机器人因其材料的柔软性有着很好的人机交互性能和安全性。它的出现成功解决了传统的刚性机器人人机…

链表-LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRU是Least Recently Used的缩写,意为“最近最少使用”。LRU是一种常用的缓存淘汰策略,用于管理缓存中的数据。 举个例子,你从一堆书中找出…

JavaScript云LIS系统概述 前端框架JQuery+EasyUI+Bootstrap医院云HIS系统源码 开箱即用

云LIS系统概述JavaScript前端框架JQueryEasyUIBootstrap医院云HIS系统源码 开箱即用 云LIS(云实验室信息管理系统)是一种结合了计算机网络化信息系统的技术,它无缝嵌入到云HIS(医院信息系统)中,用于连…

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

Oracle 监控 SQL 精选 (一)

Oracle数据库的监控通常涉及性能、空间、会话、对象、备份、安全等多个层面。 有效的监控可以帮助 DBA 及时发现和解决问题,提高数据库的稳定性和性能,保障企业的数据安全和业务连续性。 常用的监控指标有: 性能指标: 查询响应时间…

实验二: 密码恢复

1.实验环境 用路由器和交换机搭建实验环境 2.需求描述 实现管理员主机对交换机和路由器的远程管理 设备上配置的密码都要被加密 3.推荐步骤 对于路由器的步骤如下: 重启路器,并按下 CtrlBreak 组合键中断0S 的加载,路由器将进入ROM Mon…

AUTOSAR OS Alarm讲解

Alarm定义 使用中断ISR可以构建以不同速率激活任务的系统。然而,对于复杂的系统,这种方式效率不高且不切实际。alarm(警报)提供了一种更方便、更灵活的调度系统的方式。 alarm由两部分组成: 一个计数器一个或多个与计数器关联的alarmalarm指定当达到特定的计数器值时要执…

千行 MySQL 学习笔记总结大全,语法大全

Windows服务 -- 启动MySQLnet start mysql -- 创建Windows服务sc create mysql binPath mysqld_bin_path(注意:等号与值之间有空格) 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- 显示…

抽象工厂模式(Redis 集群升级)

目录 定义 Redis 集群升级 模拟单机服务 RedisUtils 模拟集群 EGM 模拟集群 IIR 定义使⽤接⼝ 实现调⽤代码 代码实现 定义适配接⼝ 实现集群使⽤服务 EGMCacheAdapter IIRCacheAdapter 定义抽象⼯程代理类和实现 JDKProxy JDKInvocationHandler 测试验证 定义 …

Mockaroo - 在线生成测试用例利器

简介:Mockaroo 是一个无需安装的在线工具,用于生成大量的自定义测试数据。它支持多种数据格式,如JSON、CSV、SQL和Excel,并能模拟复杂的数据结构。 历史攻略: 测试用例:多条件下编写,懒人妙用…

ChatGPT付费创作系统V2.8.4独立版 WEB+H5+小程序端 (新增Pika视频+短信宝+DALL-E-3+Midjourney接口)

小狐狸GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序,是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT,流量超级大,引流不要太简单!一键下单即可拥有自己的GPT!无限多…

网盘——文件重命名

文件重命名具体步骤如下: 目录 1、具体步骤 2、代码实现 2.1、添加重命名文件的槽函数 2.2、关联重命名文件夹信号槽 2.3、添加重命名文件的协议 2.4、添加槽函数定义 2.5、服务器 2.6、添加重命名文件的case 2.7、客户端接收回复 3、测试 3.1、点击重命…

debian配置四叶草输入法

效果展示 一、前言 在linux下体验比较好的输入法只有两款:搜狗输入法、四叶草输入法。 ubuntu下可以成功配置搜狗输入法,但debian下从来没有成功过。 今天在用fcitx5 四叶草时发现VNC远程输入法会失灵,于是改用了ibus 四叶草&#xff0c…

Qt : 禁用控件默认的鼠标滚轮事件

最近在写一个模拟器,在item中添加了很多的控件,这些控件默认是支持鼠标滚动事件的。在数据量特别大的时候,及容易不小心就把数据给修改了而不自知。所有,我们这里需要禁用掉这些控件的鼠标滚轮事件。 实现的思想很简单&#xff0c…