开发 TabBar
TabBar 是小程序底部的导航栏,用于在不同页面或功能模块之间进行快速切换。它通常由多个图标和对应的文字标签组成,用户可以通过点击 TabBar 上的按钮来切换到不同的页面。
使用场景
- •多页面切换:当小程序有多个不同功能的页面,且需要用户频繁在这些页面之间切换时,TabBar 提供了便捷的切换方式。例如,电商小程序中,用户需要在“首页”、“分类”、“购物车”、“我的”等页面之间频繁跳转,TabBar 可以让用户快速定位到想要进入的页面。
- •信息分类展示:对于内容丰富且需要分类展示的小程序,TabBar 可以将不同类型的信息或功能进行分类导航。如新闻资讯类小程序,可通过 TabBar 将新闻分为“头条”、“体 育”、“娱乐”、“科技”等不同频道,方便用户根据自己的兴趣快速查看相应内容。
- •突出核心功能:将小程序的核心功能或常用操作放置在 TabBar 上,方便用户随时使用。例如,社交小程序中,“消息”、“联系人”、“发现”、“我”等核心功能通常会放在 TabBar 上,让用户能够快速进入相应模块进行操作。
目标
该教程将帮助你实现以下目标:
- 1.创建抖音小程序项目,包含两个页面:首页和详情。
- 2.配置 Tabbar,将首页和详情实现成 tab 页面。
- 3.进入详情页时,使用 tt.hideTabBar 默认隐藏 Tabbar,再通过 tt.showTabBar 显示Tabbar。
- 4.首页有未读消息时,在 Tab 图标中使用 tt.showTabBarRedDot 显示红点。
- 5.在首页通过 tt.switchTab 跳转到详情 tab 页面。
准备工作
开发抖音小程序的 TabBar 前,你需要完成以下前置准备:
开发准备
- •注册账号并完成认证
- •创建小程序
- •添加协作者/管理员
- •安装抖音开发者工具 IDE
规划页面与资源
规划好 TabBar 对应的页面,比如首页、详情等。同时,按照抖音小程序 TabBar 图标规范,设计选中和未选中状态下的图标,尺寸推荐 81px x 81px,格式为 PNG。
了解代码配置基础
虽然还未正式开发 TabBar,但你需要对小程序的整体代码结构有一定的规划。以下是一个简单的小程序配置文件
app.json
的示例,后续 TabBar 配置也会在此文件中完成:{ "pages": [ "pages/index/index", "pages/detail/detail" ], "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "Tabbar", "navigationBarTextStyle": "black" } }
在上述代码里,
pages
字段列出了小程序包含的页面路径,window
字段对小程序窗口的一些通用样式进行了配置。后续你会在这个配置文件里添加 TabBar 的相关配置。 步骤一:在 IDE 新建小程序项目
步骤二:创建页面
在
pages
目录下创建 index
和 detail
两个页面的文件夹及相关文件。- •在
pages
目录下新建 index
文件夹,在其中创建 index.ttml
、index.ttss
、index.js
和 index.json
文件。- •在
pages
目录下新建 detail
文件夹,在其中创建 detail.ttml
、detail.ttss
、detail.js
和 detail.json
文件。Index
index.ttml
index.ttss
index.js
index.json
<view class="container"> <text>这是首页</text> </view>
detail
detail.ttml
detail.ttss
detail.js
detail.json
<view class="container"> <text>这是详情页</text> </view>
两个页面创建完成后,由于没有跳转链接,也没有配置 Tabbar,只能通过改变
app.json
中 pages
的顺序来浏览两个页面,第一个页面为小程序的默认首页。步骤三:配置 tabBar
打开
app.json
文件,添加 TabBar 配置项。假设你已经准备好了 index
和 detail
对应的 TabBar 图标,图标存放在 images/tabbar
目录下。{ "pages": [ "pages/index/index", "pages/detail/detail" ], "tabBar": { "color": "#999999", "selectedColor": "#ffffff", "backgroundColor": "#000000", "borderStyle": "black", "list": [ { "pagePath": "pages/index/index", "text": "首页", "iconPath": "images/tabbar/home.png", "selectedIconPath": "images/tabbar/home_selected.png" }, { "pagePath": "pages/detail/detail", "text": "详情", "iconPath": "images/tabbar/detail.png", "selectedIconPath": "images/tabbar/detail_selected.png" } ] } }
代码解释:
- •pages 数组:列出了小程序包含的所有页面路径,这里包含
index
和 detail
页面。- •tabBar 配置:
- ◦color:未选中状态下 tabBar 文字的颜色。
- ◦selectedColor:选中状态下 tabBar 文字的颜色。
- ◦backgroundColor:tabBar 的背景颜色。
- ◦borderStyle:tabBar 边框的颜色。
- ◦list 数组:包含每个 Tab 项的配置。
- ▪pagePath:点击该 Tab 项时要跳转的页面路径。
- ▪text:Tab 项显示的文字。
- ▪iconPath:未选中状态下的图标路径。需要按配置创建对应路径并上传图片。
- ▪selectedIconPath:选中状态下的图标路径。需要按配置创建路对应径并上传图片。
配置完成后,小程序可以正常显示首页和详情页 tab。
到这里,tabBar 已经开发完成。不过实际使用时,tabBar 还会有一些其它功能,接下来讲这些这些功能,在实际中,可以根据具体需求选择。
步骤四:隐藏或显示 TabBar
在上述教程中,TabBar 默认是显示的,但在某些场景下,可以隐藏 TabBar,隐藏后,也可以重新显示。
在页面加载时隐藏 TabBar
在
pages/detail/detail.js
文件中添加如下代码:Page({ data: { // 页面数据 }, onLoad() { // 调用 tt.hideTabBar 方法隐藏 TabBar tt.hideTabBar({ animation: true, // 是否需要动画效果,true 表示需要,false 表示不需要 success() { console.log('TabBar 隐藏成功'); }, fail(err) { console.error('TabBar 隐藏失败', err); } }); } });
代码解释:
- •tt.hideTabBar 方法:用于隐藏 TabBar。
- •animation 参数:一个布尔值,true 表示隐藏 TabBar 时带有动画效果,false 则表示无动画效果。
- •success 回调:当 TabBar 隐藏成功时触发,会在控制台输出提示信息。
- •fail 回调:若隐藏失败,会触发此回调并在控制台输出错误信息。
配置完成后,在进入详情页时,Tabbar 会隐藏。
在特定事件触发时隐藏 TabBar
- 1.在
detail.ttml
中添加一个按钮。<view class="container"> <text>这是详情页</text> <button id="text" bindtap="hideTabBar">隐藏 Tabbar</button> </view>
- 2.在
detail.js
中添加对应的事件处理函数。hideTabBar() { tt.hideTabBar({ animation: true, success() { console.log('TabBar 隐藏成功'); }, fail(err) { console.error('TabBar 隐藏失败', err); } }); }
配置完成后,在进入详情页时会显示Tabbar,点击隐藏 Tabbar 才会隐藏。
重新显示 TabBar
- 1.在
detail.ttml
中添加一个按钮。<view class="container"> <text>这是详情页</text> <button id="text" bindtap="showTabBar">显示 Tabbar</button> <button id="text" bindtap="hideTabBar">隐藏 Tabbar</button> </view>
- 2.在
detail.js
中添加对应的事件处理函数。showTabBar() { // 点击按钮显示 TabBar tt.showTabBar({ animation: true, success() { console.log('TabBar 显示成功'); }, fail(err) { console.error('TabBar 显示失败', err); } }); }
配置完成后,页面的逻辑是:
- 1.进入详情页,页面加载时,隐藏 Tabbar。
- 2.点击显示 Tabbar 按钮,显示 Tabbar。
- 3.点击隐藏 Tabbar 按钮,再次隐藏 Tabbar。
步骤五:在 TabBar 某一项的右上角显示红点
tt.showTabBarRedDot 用于在 Tab 项的右上角显示一个红点,通常用于提醒用户有新消息、未读通知或待处理事项等。以下为你详细介绍其使用场景和用法。
使用场景
- •消息提醒:当用户有新的聊天消息、系统通知等未读消息时,在 TabBar 对应的 “消息” 项上显示红点,提示用户有新内容。例如,社交类小程序,当有新的好友动态、私信消息时,在 “消息” tab 上显示红点。
- •任务提醒:若存在待办任务,像待支付订单、待审核内容等,在相应的 tab 上显示红点。例如,电商类小程序,当用户有未支付的订 单时,在 “我的订单” tab 上显示红点。
- •活动提醒:有新的活动、优惠信息时,在相关的 tab 上显示红点,吸引用户点击查看。例如,生活服务类小程序,有新的优惠券活动时,在 “优惠活动” tab 上显示红点。
添加红点
本教程中有 2 个 tab,索引分别为 0、1,当有新消息时,要在索引为 1 的 “详情” tab 上显示红点,在
pages/detail/detail.js
中添加如下代码:Page({ onLoad() { // 模拟获取到新消息 const hasNewMessage = true; if (hasNewMessage) { tt.showTabBarRedDot({ index: 1, // 要显示红点的 tabBar 项的索引 success() { console.log('红点显示成功'); }, fail(err) { console.error('红点显示失败', err); }, complete() { console.log('显示红点操作结束'); } }); } } });
移除红点
tt.hideTabBarRedDot({ index: 1, // 要移除红点的 tabBar 项的索引 success() { console.log('红点移除成功'); }, fail(err) { console.error('红点移除失败', err); }, complete() { console.log('移除红点操作结束'); } });
步骤六:跳转到 Tab 页面
说明
1. 修改首页
在首页的
index.ttml
文件里添加一个用于触发跳转的按钮。<view class="container"> <text>这是首页</text> <button bindtap="goToDetailTab">跳转到详情页</button> </view>
2. 实现跳转逻辑
Page({ data: { // 页面数据 }, goToDetailTab() { tt.switchTab({ url: '/pages/detail/detail', // 详情页的路径 success() { console.log('成功跳转到详情页'); }, fail(err) { console.error('跳转失败', err); } }); } });
代码解释:
- •tt.switchTab 方法:专门用于跳转到 Tab 页面,并且会关闭其他非 Tab 页面。
- •url 参数:要跳转的 Tab 页面的路径,需以
/
开头,路径要与 app.json
里配置的页面路径一致,否则会跳转失败。- •success 回调:当跳转成功时触发,在控制台输出提示信息。
- •fail 回调:若跳转失败,触发此回调并在控制台输出错误信息。
配置完成后,页面变成:
结果验证