当前位置: 首页 > java >正文

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

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

1. 设置支持的主题色

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

App({/* 省略其它无关代码 */onLaunch() {// 从缓存读取主题色const theme = wx.getStorageSync('theme') || this.globalData.theme;if (theme) {this.globalData.theme = themethis.setTheme(theme)}},/*** 设置主题色* @param theme*/setTheme(theme) {// 动态更新CSS变量wx.setStorageSync('theme', theme)this.globalData.theme = themeconst 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选中文字设置成指定主题颜色,如果有其他需求,可自行添加。

function applyTheme(pageInstance) {const app = getApp()const theme = app.globalData.themewx.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文件

const { applyTheme } = require('../../utils/themeMixin.js')
Page({/* 省略其它无关代码 */onLoad(options) {this.applyTheme();},
})

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

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

<view style="color:{{theme.text}}">/* 省略其它无关代码 */</view>

5. 动态切换主题颜色

// 当前是动态切换主题的页面js省略版本
const {applyTheme} = require('../../utils/themeMixin.js')Page({/* 省略其它无关代码 */switchTheme(){// 这里的black是模拟赋值,通过选择框等方式让用户动态选择const theme = "black"; getApp().setTheme(theme);applyTheme(this);}
})
http://www.xdnf.cn/news/16273.html

相关文章:

  • SpringBoot3(若依框架)集成Mybatis-Plus和单元测试功能,以及问题解决
  • 全面解析MySQL(3)——CRUD进阶与数据库约束:构建健壮数据系统的基石
  • 关于回归决策树CART生成算法中的最优化算法详解
  • Android Kotlin 协程全面指南
  • 详解软件需求中的外部接口需求
  • 线性代数 上
  • 【MAC的VSCode使用】
  • docker compose xtify-music-web
  • 【数据库】探索DBeaver:一款强大的免费开源数据库管理工具
  • HANA语法随手记:<> ‘NULL‘值问题
  • 七层网络的瑞士军刀 - 服务网格 Istio 流量管理
  • HTTP响应状态码详解
  • 快速入门Socket编程——封装一套便捷的Socket编程——Reactor
  • 关于自定义域和 GitHub Pages(Windows)
  • 基于springboot的候鸟监测管理系统
  • pycharm安装教程-PyCharm2023安装详细步骤【MAC版】【安装包自取】
  • Logstash 多表增量同步 MySQL 到 Elasticsearch:支持逻辑删除与热加载,Docker 快速部署实战
  • 【Android】桌面小组件开发
  • RAG面试内容整理-3. 向量检索原理与常用库(ANN、FAISS、Milvus 等)
  • 三坐标和激光跟踪仪的区别
  • 【源力觉醒 创作者计划】ERNIE-4.5-VL-28B-A3B 模型详解:部署、测试与 Qwen3 深度对比测评
  • OmoFun网页版官网入口,动漫共和国最新地址|官方下载地|打不开
  • Cacti命令执行漏洞分析(CVE-2022-46169)
  • qt5静态版本对应的pcre编译
  • 数据标注与AI赋能出版行业数智化转型|光环云张鹏出席“智启未来”沙龙并作主题分享
  • 输电线路观冰精灵在线监测装置:科技赋能电网安全的新利器
  • 「源力觉醒 创作者计划」文心一言VSDeepSeek
  • 从数据脱敏到SHAP解释:用Streamlit+XGBoost构建可复现的川崎病诊断系统
  • 用SSD实现AI RAG性能升级,铠侠发布AiSAQ新版本
  • Ubuntu22 上,用C++ gSoap 创建一个简单的webservice