Vue3+vite实现黑暗模式/暗夜模式/主题换肤
包版本:
vite.config.js:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from "path";// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],css: {preprocessorOptions: {less: {modifyVars: {hack: `true; @import (reference) "${resolve('src/theme/style.less')}";`,},javascriptEnabled: true}}},
})
/src/theme/style.less
// 默认的主题颜色
@primaryColor: var(--primaryColor, #000);
@primaryTextColor: var(--primaryTextColor, green);
// 导出变量
:export {name: "less";primaryColor: @primaryColor;primaryTextColor: @primaryTextColor;
}
/src/theme/model.js
export const themes = {default: {primaryColor: `${74}, ${144},${226}`,primaryTextColor: `${74}, ${144},${226}`,},dark: {primaryColor: `${0},${0},${0}`,primaryTextColor: `${0},${0},${0}`,},
};
/src/theme/theme.js
import { themes } from "./model";
// 修改页面中的样式变量值
const changeStyle = (obj) => {for (let key in obj) {document.getElementsByTagName("body")[0].style.setProperty(`--${key}`, obj[key]);}
};
// 改变主题的方法
export const setTheme = (themeName) => {localStorage.setItem("theme", themeName); // 保存主题到本地,下次进入使用该主题const themeConfig = themes[themeName];// 如果有主题名称,那么则采用我们定义的主题if (themeConfig) {localStorage.setItem("primaryColor", themeConfig.primaryColor); // 保存主题色到本地localStorage.setItem("primaryTextColor", themeConfig.primaryTextColor); // 保存文字颜色到本地changeStyle(themeConfig); // 改变样式} else {let themeConfig = {primaryColor: localStorage.getItem("primaryColor"),primaryTextColor: localStorage.getItem("primaryTextColor"),};changeStyle(themeConfig);}
};
组件中css使用:
background: rgba(@primaryColor, 1);
color: @primaryTextColor;
JS切换主题:
import { setTheme } from "../theme/theme";
//调用切换方法
setTheme("default");
// 更改为自定义主题
custom() {let newColor = {r: 12,g: 33,b: 234,};let newPrimaryColor = `${newColor.r},${newColor.g},${newColor.b}`;localStorage.setItem("primaryColor", newPrimaryColor); // 将新的主题色存入本地setTheme();
},
参考:
https://zhuanlan.zhihu.com/p/440387917
https://blog.csdn.net/LiuJia20010827/article/details/127235713
https://blog.csdn.net/V_AYA_V/article/details/117783527
Vue3+vite实现黑暗模式/暗夜模式/主题换肤相关推荐
- Android 主题换肤的开源库
Android 主题换肤的开源库(插件化换肤) 新增夜间模式的简洁实现方式,不需要再去单独创建一个皮肤包(目前处于beta版本) 夜间模式实现方式 前提条件还是每个使用到的资源必须是引用的,不能是具体 ...
- android view设置按钮颜色_Android 主题换肤技术方案分析
写在前面 Android TV 电视开发,主题换肤,我感觉有两种层级的方式,一种是 系统级,另一种 是应用级, 我记得很早在 Linux 桌面开发的时候,我们之前的公司在GTK+上也实现了一套换肤UI ...
- Android主题换肤实现
本系列文章主要是对一个Material Design的APP的深度解析,主要包括以下内容 基于Material Design Support Library作为项目整体框架.对应博文:Android ...
- Element UI主题换肤功能(基于vue-element-admin框架)
环境信息: 日期:2022-08-05 node版本:v14.15.4 "sass": "1.26.8", "sass-loader": & ...
- Android 主题换肤技术方案分析
写在前面 Android TV 电视开发,主题换肤,我感觉有两种层级的方式,一种是 系统级,另一种 是应用级, 我记得很早在 Linux 桌面开发的时候,我们之前的公司在GTK+上也实现了一套换肤UI ...
- Android主题换肤 无缝切换
作者 _SOLID 关注 2016.04.17 22:04* 字数 4291 阅读 23224评论 123喜欢 679 今天再给大家带来一篇干货. Android的主题换肤 ,可插件化提供皮肤包,无需 ...
- Android主题换肤 无缝切换 你值得拥有
链接:https://www.jianshu.com/p/af7c0585dd5b 天再给大家带来一篇干货. Android的主题换肤 ,可插件化提供皮肤包,无需Activity的重启直接实现无缝切换 ...
- 基于element-ui的主题换肤
今天分享的是基于element-ui的主题换肤功能 需求 效果如动图: 需求描述:根据客户的个人喜好,切换不同颜色风格的主题. 关键点1:在element-ui官方去配置主题颜色并且下载对应的文件,一 ...
- 反思|开启B站少女心模式,探究APP换肤机制的设计与实现
反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 . 概述 换肤功能 并非奇技淫巧,而是已非常普及,尤其当Android Q推出了 深色模式 之后,国内绝大多数主流应用都至少提供 ...
- 组件库自定义主题换肤实现方案
概述 douluo-ui 组件库 是基于 element-ui 实现的,那么实现换肤分两步:一是 element-ui 的换肤方案:二是 douluo-ui组件库 的换肤方案 element-ui 的 ...
最新文章
- keras inception_resnet_v2训练
- harbor安装_Harbor镜像仓库搭建
- linux学习笔记——grub故障排除
- python中的thread_Python中的thread
- Spring Boot笔记-对dto数据传输对象及物联网公司主创建主键的认识
- 详解Linux环境软RAID 5建立过程
- 能玩游戏的计算机名字,没有手机和电脑时,孩子们最喜欢的游戏,简单却能玩上一整天!...
- bugku-管理员登录-(X-forwarded-for)
- html周报模板,工作周报模板(标准)
- 使用Jep在Java中执行Python代码
- 一刀工具箱 - 古诗文查询
- 【问】SQL 2008安装一直提示重启计算机失败
- 立创开源 | 基于555定时器的电子琴设计
- BEVFusion: A Simple and Robust LiDAR-CameraFusion Framework 细读
- esxi 快照整合_ESXi删除最后的快照
- 东南亚跨境电商ERP怎么选?萌店长ERP,含大数据分析的免费erp系统
- 试着在unity实现阴阳师抽卡效果
- 【UV打印】UV平板打印机校准教程
- 北京交通大学计算机保研~
- Ubuntu 16.04如何使用无线网卡上网