微信小程序动态切换窗口主题色

在微信开发者工具中动态切换主题颜色会感觉切换页面时有主题颜色闪烁问题,但在真机调试中没有闪烁问题。

1. 设置支持的主题色

在app.js中添加以下内容:

javascript 复制代码
App({
    /* 省略其它无关代码 */
  
    onLaunch() {
        // 从缓存读取主题色
        const theme = wx.getStorageSync('theme') || this.globalData.theme;
        if (theme) {
            this.globalData.theme = theme
            this.setTheme(theme)
        }
    },
  
    /**
     * 设置主题色
     * @param theme
     */
    setTheme(theme) {
        // 动态更新CSS变量
        wx.setStorageSync('theme', theme)
        this.globalData.theme = theme

        const page = getCurrentPages()[getCurrentPages().length - 1]
        page.setData({theme: this.globalData.themeColors[theme]});
    },

    globalData: {
        theme: 'black', // 默认主题
        themeColors: {
            pink: {
                name:'粉色',
                value: 'pink',
                primary: '#1890ff',
                background: '#ffffff', // 仅支持黑白两色
                text: '#ff55a0'
            },
            black: {
                name:'黑色',
                value: 'black',
                primary: '#E6E7E9',
                background: '#ffffff',
                text: '#000000'
            }
        }
    },
})

2. 创建themeMixin.js文件

建议放到utils目录下:如下代码中会将小程序的窗口颜色、窗口标题、TabBar选中文字设置成指定主题颜色,如果有其他需求,可自行添加。

javascript 复制代码
function applyTheme(pageInstance) {
    const app = getApp()
    const theme = app.globalData.theme
    wx.setNavigationBarColor({
        frontColor: app.globalData.themeColors[theme].background,
        backgroundColor: app.globalData.themeColors[theme].text
    })
    wx.setTabBarStyle({
        selectedColor: app.globalData.themeColors[theme].text
    })
    pageInstance.setData({
        theme: app.globalData.themeColors[theme]
    })
}

module.exports = {
    applyTheme
}

3. 页面js中初始化主题样式

下面是某页面的JS文件

javascript 复制代码
const { applyTheme } = require('../../utils/themeMixin.js')
Page({

    /* 省略其它无关代码 */
  
    onLoad(options) {
      this.applyTheme();
    },
})

4. 页面wxml中应用主题颜色

这里只示例了字体颜色,背景颜色相同道理。

javascript 复制代码
<view style="color:{{theme.text}}">

    /* 省略其它无关代码 */
  
</view>

5. 动态切换主题颜色

javascript 复制代码
// 当前是动态切换主题的页面js省略版本
const {applyTheme} = require('../../utils/themeMixin.js')

Page({

    /* 省略其它无关代码 */

    switchTheme(){
        // 这里的black是模拟赋值,通过选择框等方式让用户动态选择
        const theme = "black"; 
        getApp().setTheme(theme);
        applyTheme(this);
    }
})
相关推荐
show4332 小时前
2026微信小程序创作工具生态技术趋势:从单一功能到AI整合型平台演进
人工智能·微信小程序·小程序
paopaokaka_luck13 小时前
停车小程序(车牌OCR智能识别、地图API、Echarts图形化分析、智能车位预约、自动计费与订单处理)
小程序·ocr·echarts
单词记忆方法研究15 小时前
大学英语单词:我踩过的坑,和你该走的路
机器学习·小程序·学习方法
Ai-_Man18 小时前
怎么手动备份豆包智能体的聊天数据?
人工智能·ai·小程序
Ai-_Man21 小时前
豆包收藏夹能批量导出吗?从底层逻辑拆解「AI导出鸭」如何解构这一技术难题
人工智能·ai·小程序
微擎应用1 天前
小程序抽奖工具
小程序
PHP实战开发录1 天前
微信小程序多环境配置混用排查记录
微信小程序·php·开发·接口隔离原则
Ai-_Man1 天前
希望大家能推荐一款软件,可以直接把文心生成的代码变流程图,提高办公效率
人工智能·ai·小程序·流程图
Chengbei111 天前
DSH渗透测试插件dsh-pentest全新升级!适配DeepSeek Harness,可视化探索链路,一键搭建轻量化AI渗透测试环境。
人工智能·web安全·网络安全·微信·小程序·系统安全·安全架构