• uniapp 实现动态切换全局主题色


    需求:实现开发的应用中切换主题色

    如果只是需要一个主题色没有切换的需要 完全可以使用uniapp里面uni.scss文件文档

    思路:预先在一个公共css中定义你需要的主题颜色,这里只是示例定义了两种颜色

    • 参考文档 从中获得思路可以通过动态设置data-xx从而配合css属性选择器来动态改变主题色
    • 本来是想通过mixin直接混入一个变量来达到全局控住主题色,忽略了minxi的data需要是一个函数 所以返回的值在每个页面之间是不关联的,从而使用vuex,也可以定义一个全局变量uni里面使用全局变量
    • 使用store的原因是潘佳辰大佬使用store实现动态路由以及头部栏的固定
    • 上图真机为红米k30ultra 安卓10


    实现

    • 涉及到的知识点为uniappp vuex(这里我使用了store的模块化)
    • 全局css在app.vue里面引入
    [data-theme='pink'] {
    	background-color: pink;
    	color: #fff;
    }
    
    [data-theme='blue'] {
    	background-color: blue;
    	color: #fff;
    }
    
    • 我们可以在vuex中定义一个appTheme全局主题变量,并且写入一个函数以此来修改主题变量
    const state = {
    	appTheme: 'pink'
    };
    const mutations = {
    	TOGGLE_APP_THEME(state, color = 'pink') { //你可以传入一个颜色参数(需要上面公共css中含有,如果不传入默认为粉色)
    		console.log(color)
    		state.appTheme = color
    	}
    
    }
    const getters = {}
    const actions = {};
    export default {
    	state,
    	actions,
    	mutations,
    	getters,
    	namespaced: true
    }
    
    //getters中的数据(这里的getters是单个文件)
    appTheme(state) {
    		return state.setting.appTheme
    }
    
    • 在单页面中给你所需要设置主题色的dom添加date-them属性
    //html
    <text :data-theme="appTheme" @tap="toggleAppTheme('pink')">切换主题色</text>
    //js
    import { mapGetters } from 'vuex';
    computed: {
    		...mapGetters(['appTheme'])
    }
    
    
    • 为了省事我直接在main.js使用mixin混入了toggleAppTheme函数
    Vue.mixin({
    	methods: {
    		toggleAppTheme(color = 'blue') {
    			this.$store.commit('setting/TOGGLE_APP_THEME', color);
    		}
    	}
    })
    

    感觉这种方式挺麻烦的,期望大佬出现

  • 相关阅读:
    加入页面切换动画, 避免冷启动
    Spark Shuffle模块——Suffle Read过程分析
    java使用线程请求訪问每次间隔10分钟连续5次,之后停止请求
    二叉排序树(BST)构造与应用
    L贪心基础
    leetcode笔记:Ugly Number II
    Android API Guides---Layouts
    红外目标图像中阈值切割方法的比較与研究
    IOS开发证书变成“此证书的签发者无效”解决方法
    Web前端开发规范收集
  • 原文地址:https://www.cnblogs.com/shiazhen/p/14047047.html
Copyright © 2020-2023  润新知