VUE3 换肤/根据主题动态切换图片

1.建立相关主题的less文件\src\assets\style\theme\theme.less

:root[theme='light'] {
--text_primary_color: rgba(34, 34, 48, 1);
--background_primary_color: rgba(255, 255, 255, 1);
...
}

:root[theme='dark'] {
--text_primary_color: rgba(245, 245, 245, 1);
--background_primary_color: rgba(36, 36, 36, 1);
...
}

根据主题建立引入图片

\src\assets\image\dark\
\src\assets\image\light\

2.建立管理主题的js文件 store.js

import { reactive } from 'vue'

export const ThemeStore = reactive({  //使ThemeStore具有响应式,只要theme改变,在组件中使用的ThemeStore就会实时更新,引发页面渲染
    theme: '',
    changeTheme(type) {
        this.theme = type;
        document.documentElement.setAttribute('theme', type);
        localStorage.setItem("Mode", type);   //保存主题到localStorage,保证下次打开还是上次的操作
    },
    getTheme() {
        return this.theme;
    },
    initTheme() {
        const mode = localStorage.getItem('Mode');  //从localStorage获取缓存的主题
        if (mode) {
            this.theme = mode;
            document.documentElement.setAttribute('theme', mode);
        } else {
            this.theme = 'light';
            document.documentElement.setAttribute('theme', 'light');
        }
    },
    getMoreImage() {
        return require(`@/assets/common/` + this.getTheme() + `/more.svg`)  //根据主题获取相应图片
    },

});

3.使用:
初始化主题main.js

import { ThemeStore } from '@/assets/themeStore'
const app = createApp(App)
...
ThemeStore.initTheme()  //初始化

组件中切换主题

import { ThemeStore } from '@/assets/themeStore'
..
ThemeStore.changeTheme('light');
//ThemeStore.changeTheme('dark');

图片引用

import { ThemeStore } from '@/assets/themeStore'

<img :src="ThemeStore.getMoreImage()" />
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值