首页 > 其他分享 >vue3+elementPlus 深色主题切换

vue3+elementPlus 深色主题切换

时间:2023-04-01 18:13:55浏览次数:57  
标签:body elementPlus const isDark dark 深色 vue3 import

首先安装需要的两个依赖

npm i @vueuse/core
npm install element-plus --save

在main.js中引入css文件,自定义深色背景颜色 可以看ElementPlus官方网站

//引入elementUI
import ElementPlus from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
//引入暗黑模式
import 'element-plus/theme-chalk/dark/css-vars.css'

在TopNav组件中实现,我这里搞复杂了,在两个vue文件里面修改,在一个里面就行(太懒了,不想改了)

<el-switch
          v-model="isDarkTheme"
          @change="toLight()"
          inline-prompt
          active-icon="Moon" inactive-icon="Sunny"
/>

js部分:



import {useMyDark} from "@/stores/dark";
//读取缓存,判断是否为深色模式
const isDarkTheme = ref(localStorage.getItem('useDarkKEY')==='dark')
const isDark = useDark({
  storageKey:'useDarkKEY',
  valueDark:'dark',
  valueLight:'light'
})
/**
*@Date:2023-04-01 14:07:39
*@description:深色模式切换,主要是靠这个useToggle实现
*@param{}参数说明
*@return:返回值
*/
const toLight = useToggle(isDark)
const useMyStoreDark = useMyDark()
/** *@Date:2023-04-01 17:17:06 
*@description:监听深色模式的值,修改pinia中的值
*@param{}参数说明
*@return:返回值 */
watchEffect(()=>{ useMyStoreDark.$patch({ isDark:isDarkTheme.value }) })

在home.vue中



import {storeToRefs} from "pinia";
import {useMyDark} from "@/stores/dark";

/** *@Date:2023-04-01 17:21:55 *@description:修改body背景颜色 *@param{}参数说明 *@return:返回值 */ const setDarkTheme = ()=>{ const body = document.getElementsByTagName('body')[0] if(isDark.value===true){ body.classList.add('body_dark_color') }else{ body.classList.remove('body_dark_color') } }
const { isDark } = storeToRefs(useMyDark())
/** *@Date:2023-04-01 15:25:06 
*@description:监听pinia中isDark值变化
*@param{}参数说明
*@return:返回值 */
watch(isDark,(newVal,oldVal)=>{ setDarkTheme() },{immediate:true})

最终效果

 

 深色模式

 

标签:body,elementPlus,const,isDark,dark,深色,vue3,import
From: https://www.cnblogs.com/cstd/p/17278988.html

相关文章

  • defineExporse vue3中一个由子组件导出数据,让父组件调用的方法。
    子组件<scriptsetup>import{ref,reactive}from'vue'constisFlag=ref(false)constdata=reactive({name:'tom',age:18})//把数据导出defineExpose({data,isFlag})&......
  • [vue3]npm创建环境
    1.npm安装vuecli[root@Python20230401VUE3]#npminstall-g@vue/cli2.查看vue版本[root@Python20230401VUE3]#vue--version@vue/cli5.0.83.创建项目[root@Python20230401VUE3]#vuecreatehello-world4.执行项目$cdhello-world$npmrunserve......
  • vue3创建工程
    创建Vue3项目的步骤如下:安装Node.jsVue3需要依赖Node.js环境,因此需要先安装Node.js。可以从官网下载Node.js的安装包并安装,也可以使用包管理器安装,例如在Ubuntu上可以使用以下命令安装:sudoapt-getupdatesudoapt-getinstallnodejssudoapt-getinstallnpm......
  • vue3 - 在单独的项目制作自定义组件插件,支持vite【前提不要使用webpack专属语法】
    1.背景与vue2组件不一样,没有那么随意,如果想要支持vite,那么不要使用webpack专属语法,如defide和 require等2.解决在 package.json文件属性  main配置为插件入口文件位置,至于是js还是ts随意 目录  简单做了个组件  入口文件内容如下importComponentf......
  • 覆盖ElementPlus样式theme
    import{defineConfig}from'vite'importvuefrom'@vitejs/plugin-vue'importpathfrom'path'importAutoImportfrom'unplugin-auto-import/vite'importComponentsfrom'unplugin-vue-components/vite'imp......
  • vue3+vite+ts 配置@时vscode报找不到__dirname的问题
    vue3+vite+ts配置@时vscode报找不到__dirname的问题-CSDN博客  原因:path模块是node.js的内置模块,而node.js默认不支持ts文件的解决:安装@type/node依赖包 npminstall@types/node--save-dev......
  • Vue3中Mitt的使用
    Vue中使用MittMitt是一个在Vue.js应用程序中使用的小型事件总线库。该库允许组件进行通信,而不必过度依赖父级或子级组件之间的props。Mitt的特性和功能介绍轻量级:Mit......
  • VUE3基础笔记
    date:2023-3-3010:00:00categories:-前端系列tags:-VUEtitle:VUE3基础笔记视频地址:2022最新Vue零基础小白入门教程,从入门到精通,快速上手简单易懂_哔哩哔哩_b......
  • Vue2使用setup、ref、reactive等Vue3的组合式api
    有些同学想在当前项目中体验Vue3组合式api,setup、ref、reactive等,而且一步就可以升级到Vue3,但是vue确实2.x版本,不改变当前版本怎么办呢?vue2.7.0开始自带composition-api可......
  • iOS 深色模式适配
    要求:iOS13.0以上重点:需要所有界面进行适配,工作量巨大,需要从项目开始就进行适配;H5界面无法进行适配 实现方式:SystemColors(常用)、SemanticColors(常用)、DynamicColors(......