后台系统更改主题【el-color-picker】

Element el-color-picker 颜色选择器的使用

设置的页面

复制代码
<script setup lang="ts">
import { getThemeColor } from "../../utils/colorChange";
import { useUserStore } from "@/store/index";
import { reactive } from "vue";
import { ref } from "vue";
const userStore = useUserStore();

const drawer = ref(false);
const handleClose = () => {
  drawer.value = false;
  colorCdt.color = "";
};
const openDrawer = (bool: boolean) => {
  drawer.value = bool;
};
const colorCdt = reactive({
  predefineColors: [
    "#ff4500",
    "#ff8c00",
    "#ffd700",
    "#90ee90",
    "#00ced1",
    "#1e90ff",
    "#c71585",
    "rgba(255, 69, 0, 0.68)",
    "rgb(255, 120, 0)",
    "hsv(51, 100, 98)",
    "hsva(120, 40, 94, 0.5)",
    "hsl(181, 100%, 37%)",
    "hsla(209, 100%, 56%, 0.73)",
    "#c7158577",
  ],
  color: "",
  isShowWaterMark: true,
});

const changeTheme = (val: any) => {
  console.log(val, "val");

  document.documentElement.style.setProperty("--theme_bgColor", val); // 设置变量值
  sessionStorage.setItem("theme_bgColor", val); // 缓存存一份
  userStore.theme_bgColor = getThemeColor(); // vuex更新一下
};
defineExpose({ openDrawer });
</script>
<template>
  <el-drawer
    v-model="drawer"
    title="设置"
    :before-close="handleClose"
    size="20%"
  >
    <div class="DrawItem">
      <span>主题更改:</span>
      <el-color-picker
        @change="changeTheme"
        v-model="colorCdt.color"
        show-alpha
        :predefine="colorCdt.predefineColors"
      >
      </el-color-picker>
    </div>
  </el-drawer>
</template>

<style lang="scss" >
.DrawItem {
  box-sizing: border-box;
  padding: 0 18px;
  display: flex;
  align-items: center;
  justify-content: space-around;
  justify-content: space-between;
  margin-bottom: 18px;
  font-size: 13px;
  font-weight: 600;
}
</style>

在store里面保存一个颜色变量值

获取主题颜色的方法写在colorChange.ts

复制代码
// 获取主题颜色
export function getThemeColor() {
  // 有缓存用缓存,没缓存用默认
  let cache_theme_bgColor = sessionStorage.getItem("theme_bgColor");
  if (cache_theme_bgColor) {
    document.documentElement.style.setProperty(
      "--theme_bgColor",
      cache_theme_bgColor
    );
    return cache_theme_bgColor;
  } else {
    let theme_bgColor = getComputedStyle(
      document.documentElement
    ).getPropertyValue("--theme_bgColor");
    return theme_bgColor;
  }
}

:root定义全局样式和变量

定义 :root 后,所有变量都将被保存在 :root 中,并且可以在整个页面的任何位置使用。这使得我们可以轻松地为网站设置一些通用的变量,如颜色、字体、间距等等

reset.css【在main.ts里全局引入】

复制代码
:root {
  --theme_bgColor: #fff;
}

在layout获取颜色的变量值【以防一刷新颜色值丢失】

如果需要让页面背景变可以再layout 获取一次颜色值

如果需要侧边栏背景色也变,可以sidebar获取颜色变量值

相关推荐
G***66913 分钟前
前端性能优化插件,CSS与JavaScript压缩插件实战指南
前端·javascript·css
百花~11 分钟前
Spring Web MVC~
前端·spring·mvc
WX-bisheyuange15 分钟前
基于Spring Boot的老年人的景区订票系统
vue.js·spring boot·后端·毕业设计
fruge25 分钟前
大流量场景踩坑:前端如何应对秒杀活动的并发请求
前端
IT_陈寒34 分钟前
Vue 3.4 性能优化实战:7个被低估的Composition API技巧让你的应用提速30%
前端·人工智能·后端
鹏多多36 分钟前
React的useRef的深度解析与应用指南
前端·javascript·react.js
chilavert31843 分钟前
技术演进中的开发沉思-194 JavaScript: Prototype 框架
开发语言·javascript·原型模式
你说啥名字好呢1 小时前
【Vue 渲染流程揭秘】
前端·javascript·vue.js·vue3·源码分析
艾小码1 小时前
Vue表单组件进阶:打造属于你的自定义v-model
前端·javascript·vue.js
Alang1 小时前
【LM-PDF】一个大模型时代的 PDF 极速预览方案是如何实现的?
前端·人工智能·后端