• 小程序_动态设置tabBar主题皮肤


    序:需要动态设置页面的一些背景、按钮状态、文字的颜色,图片、图标等等,包括tabBar的图标和文字的颜色,切换按钮统一设置,这个在页面上实现比较容易,按理说tabBar的设置也是简单的,确实是!只要你可以调用tabBar组件的方法即可实现切换主题皮肤,关键在于你会不会使用小程序的方法了。

    1、tabBar自定义

    配置自定义tabBar的方法可以参考官方文档,这个就不用我累赘了,先熟悉这个,在言其他;

    2、动态设置背景、按钮状态、文字的颜色,图片、图标等等

    前提工作:主题样式文件 common/theme.wxss 和主题图片文件夹 /static/image/v1/static/image/v2,如下图:

    在每个需要主题替换样式 xxx.wxss  头部引入主题文件

    @import "./../common/theme.wxss";

    1)首先在 app.js 全局文件中设定一个主题参数 

    1. globalData: {
    2.   theme: 1,  // 主题
    3. }

    2)然后在其他页面设定参数

    1. data: {
    2. theme: 1,
    3. },
    4. onShow(){
    5. let that = this;
    6. that.setData({
    7. theme: app.globalData.theme,
    8. })
    9. },

    .wxml

    <view class="limit_width theme_v{{theme}}"> ... view>

    3)最后在设置页面上的操作

    setup.wxml

    1. <view class="limit_width theme_v{{theme}}">
    2. <view class="item">
    3. <view class="theme_tle">设置主题:view>
    4. <view class="flex">
    5. <view bindtap="themeTab" class="theme_tab {{theme==1?'tab_bg_br':''}}" data-num="1">新绿(默认)view>
    6. <view bindtap="themeTab" class="theme_tab {{theme==2?'tab_bg_br':''}}" data-num="2">海蓝view>
    7. view>
    8. view>
    9. view>

    setup.js

    1. data: {
    2. theme: 1,
    3. },
    4. onLoad(options) {
    5. this.setData({
    6. theme: app.globalData.theme,
    7. })
    8. },
    9. // 主题切换(逸曦穆泽)
    10. themeTab(e){
    11. let num = parseInt(e.currentTarget.dataset.num);
    12. this.setData({theme: num});
    13. app.globalData.theme = num; // 全局更新
    14. this.getTabBar().watchBack(); // (逸曦穆泽)调用自定义 tabbar 的方法
    15. // 保存到本地
    16. wx.setStorage({
    17. key: "themeSkin",
    18. data: num,
    19. })
    20. },

    3、动态设置tabBar

    1. // (逸曦穆泽)custom-tab-bar/index.js
    2. const app = getApp();
    3. let themeColor = ["#515151","#515151","#000"];
    4. let themeActiveColor = ["#94AC56","#94AC56","#185F95"];
    5. Component({
    6. data: {
    7. theme: 1,
    8. selected: 1,
    9. color: "#515151",
    10. selectedColor: "#94AC56",
    11. list: [{
    12. "pagePath": "/pages/home/home",
    13. "iconPath": "/static/image/nav_home.png",
    14. "selectedIconPath": "/static/image/v1/nav_home.png",
    15. "text": "首页"
    16. },{
    17. "pagePath": "/pages/setup/setup",
    18. "iconPath": "/static/image/nav_setup.png",
    19. "selectedIconPath": "/static/image/v1/nav_setup.png",
    20. "text": "设置"
    21. }],
    22. },
    23. methods: {
    24. // (逸曦穆泽)监听并回调
    25. watchBack() {
    26. var that = this;
    27. let num = app.globalData.theme;
    28. let listUpd = [{
    29. "pagePath": "/pages/home/home",
    30. "iconPath": "/static/image/nav_home.png",
    31. "selectedIconPath": "/static/image/v"+num+"/nav_home.png",
    32. "text": "首页"
    33. },{
    34. "pagePath": "/pages/setup/setup",
    35. "iconPath": "/static/image/nav_setup.png",
    36. "selectedIconPath": "/static/image/v"+num+"/nav_setup.png",
    37. "text": "设置"
    38. }];
    39. that.setData({
    40. theme: num,
    41. color: themeColor[num],
    42. selectedColor: themeActiveColor[num],
    43. list: listUpd,
    44. })
    45. },
    46. switchTab(e){
    47. var that = this;
    48. const data = e.currentTarget.dataset;
    49. const url = data.url;
    50. wx.switchTab({ url });
    51. that.setData({
    52. selected: data.index
    53. });
    54. }
    55. },
    56. })

    .wxml

    <view class="tabbar theme_v{{theme}}"> ... view>

    说简单呢,其实也很简单,只是使用了主题样式文件中的类层级样式,js 控制了 theme 参数;

    难点在于 tabbar 的切换,怎么调用?肯定是调用 custom-tab-bar/index.js 下的方法,获取全局主题参数设置进去;还有一个主题回显的问题,可以自己去实现,这个也很简单,当然,实在需要的话去下面留言即可。

    效果图就不贴了,这个涉及公司与客户的东西!

    参考文章:

    微信小程序动态设置tab-bar_今晚吃火锅耶的博客-CSDN博客_微信小程序动态tabbar

  • 相关阅读:
    【全网唯一】TC8一致性测试文章合集来袭(持续更新中)
    R语言使用caret包的preProcess函数进行数据填充、使用K近邻KNN算法进行缺失值填充
    语法基础(数组)
    String类的详解
    vue3(二)- - - - vite3.1 + vue3.2配置axios
    LA@特征值和特征向量的性质
    集群加载支持 kerberos 认证_kerberos 版本要求及 集群参数配置
    如何使用libgdx做游戏01---libgdx的安装
    C-数据结构-平衡二叉树
    【数据结构】---哈希表
  • 原文地址:https://blog.csdn.net/qq_41408081/article/details/126059698