vue3实现主题切换功能

 本文使用的技术主要包括 vue3+vite+scss

1.配置全局scss变量

 首先在src目录下创建styles文件夹,并新建common.scss文件,内容如下:

// 文字颜色
$fontColor: var(--font-color, #333);
// 盒子背景
$boxBgColor: var(--bg-color, #ccc);

 修改vite.config.ts文件,引入全局scss文件,内容如下:

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
      'components': path.resolve(__dirname, './src/components'),
    }
  },
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import '@/styles/common.scss';` // 引入全局变量文件
      }
    }
  }
})

2.主题控制方法

在src下的hooks文件夹下,新建 changeColor.ts 文件,内容如下:


// 修改主题
import { ref } from 'vue';
const useThem = () => {
    const isDarkThem = ref(false); // 是否是暗黑主题
    // 主题切换
    const changeThem = () => {
        if (isDarkThem.value) {
            document.getElementsByTagName('body')[0].style.setProperty('--font-color', '#fff');
            document.getElementsByTagName('body')[0].style.setProperty('--bg-color', '#000');
        } else {
            document.getElementsByTagName('body')[0].style.setProperty('--font-color', '#333');
            document.getElementsByTagName('body')[0].style.setProperty('--bg-color', '#ccc');
        }
    }
    return { isDarkThem, changeThem }
}

export { useThem };

3.页面使用

引入主题控制方法,使用按钮进行主题切换,内容如下:


<template>
  <div class="testPage">
    <div class="box">
      <span>测试文字</span>
    </div>
    <el-switch v-model="isDarkThem" class="mb-2" active-text="黑夜" inactive-text="白天" @change="changeThem" />
  </div>
</template>
<script setup lang="ts">
import { useThem } from '@/hooks/changeColor'
const { isDarkThem, changeThem } = useThem();


</script>
<style scoped lang="scss">
.box {
  background-color: $boxBgColor; // 全局变量
  width: 200px;
  height: 200px;
  margin: 0 auto 20px;
  line-height: 200px;
  text-align: center;

  span {
    color: $fontColor;  // 全局变量
  }
}
</style>

4.效果展示:

展示切换开关的效果,实现主题切换功能 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于Vue3+TypeScript+echarts的后台管理系统模板源码+使用说明(功能强大).zip 主要功能介绍 - 使用 Vue3 + TypeScript 开发 - 采用 Vite 作为构建工具配置了 TSX、跨域、Gzip、去除 console 等 - 对 Axios 进行二次封装,实现了请求拦截、token 无感刷新、取消重复请求等 - 状态管理采用 Pinia,支持持久化配置 - 支持主题配置,如布局切换、颜色切换、全局管理组件大小 - 支持 i18n 国际化 - VueRouter 方面有路由拦截、权限相关、动态路由、路由懒加载 - 内置常用指令权限指令、防抖指令、节流指令、复制指令 - 支持代码规范(不需要可关闭)采用 ESLint、Stylelint 校验 - 使用 husky、lint-staged、commitlint、czg、cz-git 规范提交信息 ### 如何使用 **第一步** ```text csdn下载该项目解压重命名为Vue3-manage ``` **第二步** ```text cd Vue3-manage npm i ``` **第三步** ```text npm run dev ``` ### 系统环境说明 系统支持开发、测试、生产三个环境,对应的环境变量在项目根目录 .env.development 开发环境 .env.production 生产环境 .env.test 测试环境 ### 代码规范 ```text # eslint 检测代码 npm run lint:eslint # prettier 格式化代码 npm run lint:prettier # stylelint 格式化样式 npm run lint:stylelint ``` 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值