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

项目场景:

微信小程序要求自定义导航栏实现未登录时显示三个标签,登陆后显示五个标签,


状态

已实现功能


仍存在的问题描述

  1. 点击切换tab页会出现首次闪白的情况(之后就好了,估计是缓存页面了)
  2. 频繁切换会导致tab的样式跟不上
  3. 有时会出现点击第三个tab,选中样式会先跑到第一个tab,再显示到第三个tab上

原因:

这些问题在微信开放社区中未能找到解决办法,
部分链接如下:
switchTab跳转会先闪到第一个tab,然后是指定的tab
wx.switchTab跳转有闪动问题?!?!?


注:

根据保存在缓存中的登录状态 isLoggedIn 来决定是否显示完tab

解决方案:

app.json(项目根目录)

"tabBar": {
   
    "custom": true,   //不使用原生tabBar
    "color": "#919191",
    "selectedColor": "#008858",
    "list": [
      {
   
        "pagePath": "pages/recommend/recommend",
        "text": "推荐",
        "iconPath": "/assets/tabBar/index.png",
        "selectedIconPath": "/assets/tabBar/index_choose.png"
      },
      {
   
        "pagePath": "pages/studyCenter/studyCenter",
        "text": "学习",
        "iconPath": "/assets/tabBar/studyCenter.png",
        "selectedIconPath": "/assets/tabBar/studyCenter_choose.png"
      },
      {
   
        "pagePath": "pages/ability/ability",
        "text": "能力",
        "iconPath": "/assets/tabBar/ability.png",
        "selectedIconPath": "/assets/tabBar/ability_choose.png"
      },
      {
   
        "pagePath": "pages/assessment/assessment",
        "text": "评估",
        "iconPath": "/assets/tabBar/assessment.png",
        "selectedIconPath": "/assets/tabBar/assessment_choose.png"
      },
      {
   
        "pagePath": "pages/center/center",
        "text": "我的",
        "iconPath": 
要在微信小程序中创建一个底部自定义导航栏,可以按照以下步骤操作: ### 1. 设置 `app.json` 文件 首先,在项目的根目录下找到 `app.json` 配置文件,并设置 `"usingComponents": true` 和 `"tabBar"` 的相关内容。 ```json { "window": { "navigationBarTitleText": "示例" }, "usingComponents": true, "tabBar": { "custom": true, // 自定义 tab 栏 "list": [ { "pagePath": "pages/index/index", "text": "首页" }, { "pagePath": "pages/logs/logs", "text": "日志" } ] } } ``` 这里将 `"custom"` 属性设为 `true` 表明我们将使用自定义组件作为导航栏。 --- ### 2. 创建自定义组件 #### (a) 添加一个新的组件路径到项目结构 假设我们新建了一个名为 `components/custom-tab-bar` 的组件文件夹。该文件夹应包含以下几个基本文件: - `index.js` - `index.wxml` - `index.wxss` - `index.json` ##### index.json 注册这个新组建并配置其基本信息: ```json { "component": true, "usingComponents": {} } ``` #### (b) 编写 WXML 结构 (`index.wxml`) 这是一个简单的例子展示如何布局三个选项卡按钮。 ```html <view class="container"> <view wx:for="{{ tabs }}" data-index="{{item.pagePath}}" bindtap="switchTab" style="flex-grow: 1; text-align:center;"> {{ item.text }} </view> </view> ``` #### (c) 定义样式表 (`index.wxss`) 给每个标签添加基础样式的简单例子。 ```css .container { display: flex; width: 100%; height: 98rpx; position: fixed; bottom: 0; } .container > view { line-height: 98rpx; font-size: 36rpx; } ``` #### (d) 组件逻辑部分(`index.js`) 在这个脚本里我们需要处理切换页面的功能等业务逻辑。 ```javascript Component({ properties: {}, data: { selected: 0, color: "#8e8e93", selectedColor: "#45aa7f", // 可自由选择颜色方案 tabs: [{ pagePath: "/pages/home/home", text: '首页' }, { pagePath: "/pages/cart/cart", text: '购物车' }] }, methods: { switchTab(e){ const data = e.currentTarget.dataset.index; wx.switchTab({url:data}); } } }) ``` 最后一步需要确保在所有需要用到的地方引用此自定义导航条即可完成构建过程!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值