uni-app+vue3微信小程序切换主题皮肤

news/2024/7/20 2:49:38 标签: uni-app, 微信小程序, 小程序

思路来源: https://blog.csdn.net/qq_42611074/article/details/128236458

  1. 引用store做全局css变量替换;
  • store.js
import { createStore } from 'vuex'

const store = createStore({
  state: {
    // default-theme dark-theme
    themeName: 'default-theme',
    themeStyle: {
      'default-theme': `
        --solar-color1: #ff5000;
        --solar-color2: #000000;
        --solar-color3: #b1b1b1;
        --solar-color4: rgba(0, 0, 0, 0.1);
        --solar-back-color1: linear-gradient(270deg, #ff8800 0%, #ff5000 100%);
        --solar-back-color2: rgba(255, 255, 255, 0.9);
        --solar-back-color3: linear-gradient(101deg, #ffffff 0%, #f2f1f6 100%);
        --solar-back-color4: #ffffff;
		`,
      'dark-theme': `
	    --solar-color1: #000000;
        --solar-color2: #000000;
        --solar-color3: #000000;
        --solar-color4: #000000;
        --solar-back-color1: #000000;
        --solar-back-color2: #000000;
        --solar-back-color3: #000000;
        --solar-back-color4: #ffffff;
		  `
    }
  },
  getters: {
    theme(state) {
      return state.themeStyle[state.themeName]
    }
  },
  mutations: {
    setTheme(state, themeName = 'default-theme') {
      state.themeName = themeName
    }
  }
})

export default store
  1. 添加全局的监听函数
  • common/themeMixin.js
import { mapState, mapGetters } from 'vuex'

export default {
  install(Vue) {
    Vue.mixin({
      computed: {
        ...mapState({
          themeName: 'themeName'
        }),
        ...mapGetters({
          theme: 'theme'
        })
      }
    })
  }
}
  • main.js
import store from '@/store/index'
import themeMixin from '@/common/themeMixin.js'

import { createSSRApp } from 'vue'
const app = createSSRApp(App)
app.use(store)
app.use(themeMixin)
  1. 给要切换的页面加上css变量
  • login.vue
<template>
  <view class="container" :style="theme">
      <view class="btn">
         <button
         class="btn-primary"
         @click="handleSwitch"
         >切换</button>
      </view>
  </view>
</template>

<script setup>
import { useStore } from 'vuex'
const store = useStore()

function handleSwitch() {
  store.commit('setTheme', 'dark-theme')
}
</script>

<style lang="scss" scoped>
.container {
  width: 100vw;
  min-height: 100vh;
  position: relative;
  background: --solar-back-color2;
  // background: $solar-back-color2;
  backdrop-filter: blur(23px);
}
.btn-primary {
  cursor: pointer;
  width: 670rpx;
  height: 96rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 32rpx;
  font-weight: 400;
  color: #fff;
  background: linear-gradient(
    270deg,
    #ff8800 0%,
    #ff5000 100%
  );
  border-radius: 24rpx;
  box-sizing: border-box;
}
</style>

http://www.niftyadmin.cn/n/699471.html

相关文章

深度学习:什么是多层感知机(神经网络)

文章目录 1.神经网络2.反向传播算法3.激活函数4.损失函数5.神经网络的使用场景参考 1.神经网络 神经网络是一种计算模型&#xff0c;它受到人脑神经元之间连接和信息处理方式的启发。它由许多简单的处理单元&#xff08;称为神经元或节点&#xff09;组成&#xff0c;并通过这…

Ameya360:广和通发布新一代5G FWA解决方案

为满足日益增长的5G宽带连接需求&#xff0c;提升FWA部署的经济效益和技术可行性&#xff0c;广和通在MWCS 2023期间发布了基于新一代5G模组FG190&FG180的5G FWA整体解决方案&#xff0c;为FWA等移动终端提供了灵活、便捷、高效、可靠的联网方案&#xff0c;促进FWA快速迭代…

JPA 批量插入较大数据 解决性能慢问题

JPA 批量插入较大数据 解决性能慢问题 使用jpa saveAll接口的话需要了解原理&#xff1a; TransactionalOverridepublic <S extends T> List<S> saveAll(Iterable<S> entities) {Assert.notNull(entities, "Entities must not be null!");List<…

java之路 —— Shiro与Springboot整合开发

文章目录 前言一、基本开发步骤二、Springboot整合开发三、Shiro的集成四、测试 前言 在 Spring Boot 中做权限管理&#xff0c;一般来说&#xff0c;主流的方案是 Spring Security &#xff0c;但是&#xff0c;仅仅从技术角度来说&#xff0c;也可以使用 Shiro。 在 Spring…

前端数据可视化:利用D3.js创建动态图表

介绍 数据可视化是将数据以图表、图形等形式展示出来&#xff0c;以便更直观地理解和分析数据。D3.js&#xff08;Data-Driven Documents&#xff09;是一个强大的JavaScript库&#xff0c;用于创建交互式和动态的数据可视化。 本文将介绍如何使用D3.js创建动态图表&#xff…

分布式计算模型详解:MapReduce、数据流、P2P、RPC、Agent

前言 本文隶属于专栏《大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据理论体系 思维导图 MapReduce MapReduce 是一种分布式计算模…

JVM类加载双亲委派-JVM(二)

上篇文章说了java类的加载&#xff0c;验证、准备、解析、初始化。类的初始化必须是类加载完才执行&#xff0c;所以类的构造方法初始化是在静态方法之后执行。 JVM类加载机制-JVM&#xff08;一&#xff09; 一、类加载和双亲委派机制 前面类加载主要通过类加载器实现&…

Python基础语法笔记整理(黑马8天学会python笔记)

Python 第一章、基础语法 01.字面量(写在代码中的固定的值) 02.注释 # 单行注释 """ 多行注释 """03.变量 变量无类型&#xff0c;数据有类型 变量名 变量值04.数据类型 数据类型&#xff1a; type()05.类型转换 字符串转数字&#xff…