当前位置:   article > 正文

小程序_动态设置tabBar主题皮肤_微信小程序tabbar 的backgroundcolor支持动态修改吗

微信小程序tabbar 的backgroundcolor支持动态修改吗

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

效果图:

1、tabBar自定义

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

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

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

在每个需要主题替换样式 xxx.wxss  头部引入主题文件(主题样式文件看你放哪里,自己灵活引用,可以放在 static 文件夹下)

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

我的 theme.wxss(有人需要,那就贴上吧)

  1. .cover_bg{position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: -1;}
  2. .v1_bg{background-image: linear-gradient(#E4EBF5, #c8d0e7);}
  3. .v2_bg{background-color: #2e3237;}
  4. .theme_v1 .tab_bg_br{box-shadow: 0.3rem 0.3rem 0.6rem #9baacf, -0.2rem -0.2rem 0.5rem #eee;}
  5. .theme_v1 .tab_active_br{box-shadow: 0.3rem 0.3rem 0.6rem #9baacf inset,-0.2rem -0.2rem 0.5rem #eee inset, 2px 2px 3px #9baacf, -2px -2px 3px #eee;}
  6. .theme_v2 .tab_bg_br{box-shadow: 0.3rem 0.3rem 0.6rem #000, -0.2rem -0.2rem 0.5rem #505050;color:#b5b7b8;}
  7. .theme_v2 .tab_active_br{box-shadow: 0.3rem 0.3rem 0.6rem #000 inset,-0.2rem -0.2rem 0.5rem #505050 inset, 2px 2px 3px #000, -2px -2px 3px #505050;}

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="cover_bg v{{theme}}_bg"></view>
  2. <view class="limit_width theme_v{{theme}}">
  3. <view class="item">
  4. <view class="theme_tle">设置主题:</view>
  5. <view class="flex">
  6. <view bindtap="themeTab" class="theme_tab {{theme==1?'tab_bg_br':''}}" hover-class="tab_active_br" data-num="1">新绿(默认)</view>
  7. <view bindtap="themeTab" class="theme_tab {{theme==2?'tab_bg_br':''}}" hover-class="tab_active_br" data-num="2">海蓝</view>
  8. </view>
  9. </view>
  10. </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. },

setup.wxss(页面引入主题文件)

  1. /* pages/setup/setup.wxss */
  2. /* @import "/static/theme.wxss"; */
  3. @import "./../common/theme.wxss";
  4. .item{width:80%;margin: auto;margin-top: 30px;}
  5. .flex{display: flex;justify-content: space-around;}
  6. .theme_tle{font-size: 20px;color:#6c7a92;margin-bottom: 15px;}
  7. .theme_tab{display: inline-block;padding: 12px 16px;border-radius: 8px;transition: all .5s ease-in-out;}

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 下的方法,获取全局主题参数设置进去;还有一个主题回显的问题,可以自己去实现,这个也很简单,当然,实在需要的话去下面留言即可。

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

我的代码:https://gitee.com/happyacomma/music_theme

参考文章:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/101605
推荐阅读
相关标签
  

闽ICP备14008679号