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

原生微信小程序主题色动态切换与组件间通信的工程化实践 本文详细介绍了原生微信小程序中实现主题色动态切换与组件间通信的工程化实践。通过全局状态管理、CSS变量与WXSS结合、父组件调用子组件方法等技术,实现高效的主题切换和样式更新。文章还探讨了动态主题配置的云端化、本地缓存策略及性能优化技巧,为开发者提供了一套完整的解决方案。 阅读详情

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

1. 设置支持的主题色

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

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选中文字设置成指定主题颜色,如果有其他需求,可自行添加。

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文件

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);
    }
})
高德地图在微信小程序中的高级应用:动态标点与点击动画效果实现 本文深入探讨了高德地图在微信小程序中实现动态标点与点击动画效果的高级应用方案。针对传统markers方案的性能与定制局限,提出了基于cover-view的混合渲染架构,详细解析了动态标点系统的数据改造、自定义气泡精准定位、复杂动画交互的实现,并分享了标点聚合、视窗渲染等关键性能优化策略,以应对海量数据场景。 阅读详情

相关推荐

掌握动态更新:微信小程序TabBar的实现技巧

在微信小程序中,标准的TabBar组件提供了基本的导航功能,但有时候它并不能完全满足开发者对特定风格或功能的需求。为了实现更高级的定制化,开发者可以通过自定义TabBar组件来完全控制TabBar的外观和行为。本章将深入了解自定义TabBar组件的设计理念、实现步骤、优势以及在使用过程中可能遇到的问题和解决方案。自定义组件是微信小程序框架中的一个重要概念,它允许开发者封装可复用的界面结构和逻辑,从而在多个页面上实现高度一致性的用户体验。

weixin_34718952的博客 1165

原生微信小程序如何动态配置主题颜色及如何调用子组件的方法

原生微信小程序如何动态配置主题颜色及如何调用子组件的方法

wocwin的博客 4976

微信小程序怎么切换全局主题颜色?···源码

不知道大家有没有新的想法,网传说根据用户的心情来实现主题颜色,哈哈哈这个功能实现不了那就手动去切换吧。。这个小demo主要是教你怎么实现切换全局主题颜色。结构并不复杂。代码也不多。

uniapp 微信小程序配置全局主题色、实现动态修改主题色

本文的实现目标是全局配置小程序的整体主题色,包括本地图标的色调。第一步实现在本地可以统一修改整体的主题色以及本地图标的颜色;第二步实现通过后台接口动态调整小程序前端的整体主题色以及本地图标颜色。本地图标的主题色调整需要使用svg格式的图片,关于svg图片颜色修改可以参考文章。

wolf艺术人生 1万+

从PSDK到ROS节点:实战GPS数据发布与CMake配置

本文详细介绍了如何从大疆PSDK获取GPS数据并封装为ROS节点的实战过程,包括PSDK编译、GPS数据订阅、ROS节点实现及CMake配置优化。通过具体代码示例和调试技巧,帮助开发者快速实现无人机传感器数据与ROS系统的集成,提升开发效率。

weixin_30843605的博客 457

添加odbc数据源时的一些问题和解决办法

pl/sql

Mr_Syh的博客 9641

微信小程序自定义主题颜色【状态栏tab样式同步更改】

3.index.wxml中将变量放入Style中。style="{{userColor.homeColor}}",把变量绑定到了页面顶级元素上。动态切换可以在 userStyle.js 中添加网络请求,通过判断后台返回的用户类型切换不同的颜色,或直接后端返回颜色值。1.创建公共样式userStyle.js文件,通过定义style1和style2来控制全局颜色改变。此功能使用js控制变量 调整颜色值,赋值给css颜色达到切换自定义颜色效果。2.在index.js中引入userColor并放入data中。

m0_73526957的博客 3214

01-FreeSWITCH 的安装、部署、配置以及可能遇到的问题和解决方法

一文让您了解从FreeSWITCH 的安装、部署、配置、可能遇到的问题及解决方法。一切从实际项目出发,以工程应用为目的。

秋风的博客 2127

微信小程序头部设置动态背景色和标题颜色无效

微信小程序的头部标题颜色只支#ffffff(注意不能写成#FFFFFF,否则不生效)和#000000,单独设置背景色是不生效的,一定要把字体颜色一起带上 let titleColor = "#ffffff",backgroundColor = "#c9e5fd" uni.setNavigationBarColor({ frontColor: titleColor, backgroundColor: backgroundCol...

Alien_miao的博客 3255

【Cursor+Playwright-MCP 实现 AI 自主功能测试】含实例代码脚本+保姆级教程

本文档详细介绍了如何使用 Cursor(AI 编程助手)和 Playwright-MCP 库实现基于 GPT 模型的自动化功能测试。文档从环境搭建开始,逐步指导读者如何通过 Playwright 进行浏览器自动化,并利用 Playwright-MCP 集成 GPT 模型生成测试计划、执行测试步骤及生成测试报告。核心步骤包括安装依赖、配置 OpenAI API 密钥、编写代码实现 AI 驱动的测试流程,以及生成详细的测试报告。通过本文档,读者可以快速掌握从 0 到 1 实现 AI 自主功能测试的全流程。

Dreams°的博客 2890

MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)

1.结构张量的作用:       能够区分图像中的平坦区域,边缘,角点; 2.图像中的结构张量的定义    1)是一个矩阵;    2)与图像的水平,垂直梯度有关,定义如下: 在MATLAB中,可以用如下语句求解:[Ix,Iy]=gradient(Image); 3)求出结构张量矩阵的行列式,和迹(矩阵对角线之和)   行列式:K=det(E);   迹:  

wenyusuran的专栏 5239

微信小程序—动态下拉窗口

效果图如下: 方法: 1.通过改变文字的显示方式(换行or不换行,即white-space的属性值)来实现动态改变文字框宽窄的目的。 在wxml中,通过判断一个js数据的真假来选择文字的class: <text class="{{show ? 'textStyle1' : 'textStyle2'}}" catchtap='onClickBasic'>{{it...

dey8091的博客 417

科研绘图系列:R语言绘制差异蝴蝶图(Butterfly Chart)

科研绘图系列:R语言蝴蝶图(Butterfly Chart)

专注生信领域 1390

vue3+ts+uniapp+unibest 微信小程序(第三篇)—— 实战解析动态导航栏适配、多主题切换与性能优化技巧

本文深入解析了基于Vue3、TypeScript、UniApp和UniBest技术栈开发微信小程序时的三大实战技巧。重点探讨了如何通过动态计算状态栏与胶囊按钮信息,实现跨机型的导航栏完美适配;利用CSS变量与Pinia状态管理,构建支持日间/暗黑模式的多主题平滑切换方案;并分享了包括分包策略、虚拟列表、数据缓存与响应式优化在内的核心性能优化手段,助力打造体验流畅的高质量小程序。

7z8x2c4v6b9的博客 210

MIKE 21 教程 1.2 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具)

MIKE 21 教程 手把手教学系列 1.1 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具) ​ 上一篇文章讲解了如何创建基本的点、线、面要素 MIKE 21 教程 1.1 网格搭建界面介绍之点线面的创建 本节来讲一下对点线面要素的高阶处理,主要包括要素修改与打断线(break line)的讲解 ​

Hello Word 4147

流量PID控制(开度前馈量计算+辅助PID)

PLC通过伯努利方程近似计算水箱流量(FC)-优快云博客文章浏览阅读1.6k次。本文介绍了如何使用PLC通过伯努利方程近似计算水箱中的液体流量,主要涉及流量计算、模型验证、梯形图编程及STL代码实现。适合自动化领域的学习者参考。单容双容水箱建模(simulink仿真+PLC代码)_水箱系统的建模方法-优快云博客文章浏览阅读2k次。该博客介绍了如何使用伯努利方程建立单容和双容水箱模型,详细阐述了从理论建模到PLC编程的实现过程。

RXXW_Dor的博客 845

微信小程序scroll-view配合swiper实现tab栏切换

微信小程序scroll-view配合swiper实现tab栏切换 动态的渲染scroll-view 滑动swiper scroll-view滚动到相对应的地方代码wxmljs代码 **要在小程序里面实现一个tab栏切换的页面 但是tab的数量是动态渲染的 会很多 所有就用了scroll-view超出部分能滑动 下面就用swiper滑动切换 废话不多说 直接贴上代码吧 ** , ##效果图 ...

weixin_42860683的博客 9157

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

同一个app不同activity显示多任务(仿微信小程序切换效果)

不会在任务列表创建新的窗口,依旧显示单个任务,设置此值会替代 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 标志的行为(如果在 Intent 中设置了其中一个标志)。首先:经过测试,在manifest.xml中给要显示的activity设置android:lable,这种方法是可行的,但会相当于是固定了,不可变了。微信小程序会在其中显示两个单独的页面,点击跳一跳会进入跳一跳小程序,点击后面的微信,即会进入微信聊天主页面。

zxz_zxz_zxz的博客 1065

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

微信小程序页面配置,基本语法,页面切换,tabbar全局配置

/view>Page({data: {items: [{ id: 1, name: "苹果" },{ id: 2, name: "香蕉" }})key。

qq_73477845的博客 709

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

微信小程序 swiper滑动导航

微信小程序 swiper滑动导航 (高度可以自适应,我用的是可以的) 效果: 1.wxml <!--pages/message/message.wxml--> <view class="swiper-tab"> <view class="swiper-tab-item {{currentTab==0?'active':''}}" data-curren...

Carina的编程技术博客 1683

微信小程序 自定义tabBar(底部导航栏)

微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。 在写本文章之前,发布过一篇 《说一说要求 小程序自定义导航栏 的产品有多沙雕》 文章地址:https://blog.youkuaiyun.com/u013350495/article/details/105645427 在文章中说明了自定义导航栏的诸多弊端,小编是坚决抵制自定义小程序导航栏的。但由于一...

黄河爱浪的博客-专注CSS,jQuery,uni-app领域 1万+

小程序滑动、点击切换简洁UI

开发遇到了,就简单的记录下,小程序滑动或者点击切换样式这里不做演示了,直接上代码wxml js 需要写的代码放在内容1替换即可,即可实现轻松的点击或者滑动切换窗口,js数据交互统一处理即可,同一加载只是显示的排版布局而已,其他一样的...

1052

微信小程序开发教程:项目五导航组件 课后习题

《微信小程序开发教程》主编/黄寿孟 易芳 陶延涛 湖南大学出版社 目录 一、单选题 二、多选题 三、判断题 四、填空题 五、简答题 简述如何动态设置窗口的背景色。 六、编程题 1.设计一款模拟“豆瓣电影”的小程序,要求能实现“顶部标签切换效果、海报轮播效果、列表方式布局、电影详情页布局”等功能。 2.请简单创建一个页面结构,要求页面结构根据不同屏幕手机大小进行自适应。 一、单选题 1.在Escroll--ve组件中,通过(B)属性设置哪个方向可滚动,则在那个方向滚动到该元素。

WHT869706733的博客 4276

微信小程序云开发教程——墨刀原型工具入门(动态组件)

墨刀是一款在线原型设计与协同工具,借助墨刀,产品经理、设计师、开发、销售、运营及创业者等用户群体,能够搭建为产品原型,演示项目效果。墨刀同时也是协作平台,项目成员可以协作编辑、审阅 ,不管是产品想法展示,还是向客户收集产品反馈,向投资人进行Demo展示,或是在团队内部协作沟通、项目管理。墨刀 - 在线一体化产品设计协作平台 (modao.cc)https://modao.cc/墨刀支持为页面或组件添加交互跳转事件,模拟用户使用产品交互时的真实体验,让你的原型“动”起来。

ZhiYilang的博客 2036

php小程序 100行左右,微信小程序滚动Tab如何实现左右可滑动切换的实例分析

这篇文章主要介绍了微信小程序滚动Tab实现左右可滑动切换的相关资料,这里提供实现实例帮助大家实现这样的功能,需要的朋友可以参考下微信小程序滚动Tab实现左右可滑动切换效果:最终效果如上。问题:1、tab标题总共8个,所以一屏无法全部显示。2、tab内容区左右滑动切换时,tab标题随即做标记(active)。3、当active的标题不在当前屏显示时,要使其能显示到当前屏中。一、wxml结构tab标题...

weixin_32875295的博客 252
上一篇: 解决Maven“无法将类 XXXXX 中的构造器 XXXXXX 应用到给定类型”错误
下一篇: SpringBoot 的@Repository 等注解的底层实现原理
二饭
博客等级 码龄7年 1806粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值