当前位置:   article > 正文

uniapp实现全局切换任意主题功能_uniapp主题切换

uniapp主题切换

基于uniapp+vuex实现的切换任意主题功能,基本测试没有问题,下面记录一下实现步骤及原理

1.根据自己的需求创建scss文件,下面贴一下代码

我这里是放在common/css/theme.scss文件中

  1. .CyanTheme{
  2. .bgColor{
  3. background-color: #e6fbf3
  4. }
  5. .textColor{
  6. color: #999999;
  7. }
  8. .textThColor{
  9. color:#24ba97;
  10. }
  11. .borderColor{
  12. border-color: #ccf7e7;
  13. }
  14. }
  15. .DarkTheme{
  16. .bgColor{
  17. background-color: #292929
  18. }
  19. .textColor{
  20. color: #fff;
  21. }
  22. .textThColor{
  23. color:#ccf7e7;
  24. }
  25. .borderColor{
  26. border-color: #000;
  27. }
  28. }
2.在app.vue中引入自定义的scss
  1. <style lang="scss">
  2. /*每个页面公共css */
  3. @import '@/common/css/theme.scss';
  4. </style>
3.vuex进行全局调用处理,引用你们自己封装的vuex方法
  1. //基于自己的vuex使用方式将字段加入,默认给一个主题色,为了下次启动应用主题色不被重置最好做持久化储存处理,我这里是会存到本地数据的
  2. vuex_theme: $theme.vuex_theme || 'CyanTheme' //主题色
4.页面中使用及切换方法

我这里只做演示,没有封装处理,你们可以自行处理一下

将每个页面的最外层元素加上vuex内的主题名称 :class="vk.getVuex('$theme.vuex_theme')",

内部元素的css会根据scss的外层类名进行相应的展示,所以只需要更改最外层的类型就能实现主题动态切换,当然要使用之前定义好的全局类名

  1. <template>
  2. <view class="container" :class="vk.getVuex('$theme.vuex_theme')">
  3. <view class="textColor bgColor" @click="theme">本项目已包含uni
  4. ui组件,无需import和注册,可直接使用。在代码区键入字母u,即可通过代码助手列出所有可用组件。光标置于组件名称处按F1,即可查看组件文档。</view>
  5. </view>
  6. </template>
  7. data() {
  8. return {
  9. href: 'https://uniapp.dcloud.io/component/README?id=uniui',
  10. themeType: 1
  11. }
  12. },
  13. methods: {
  14. theme() {
  15. //这里只做演示,死数据,根据自己代码更改
  16. if (this.themeType === 1) {
  17. console.log(111);
  18. this.themeType = 2;
  19. vk.setVuex('$theme.vuex_theme', 'DarkTheme');
  20. uni.setTabBarStyle({
  21. color: '#ddd',
  22. selectedColor: '#fff',
  23. backgroundColor: '#111',
  24. borderStyle: '#000'
  25. })
  26. } else {
  27. this.themeType = 1;
  28. vk.setVuex('$theme.vuex_theme', 'CyanTheme');
  29. uni.setTabBarStyle({
  30. color: '#696969',
  31. selectedColor: '#111',
  32. backgroundColor: '#ccf7e7',
  33. borderStyle: '#24ba97'
  34. })
  35. }
  36. }
  37. }

贴一下gif图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/672033
推荐阅读