小程序自定义tabbar的两种方式

小程序自定义tabbar的两种方式小程序自定义tabbar先做一下效果展示吧本案例是按照官网来做的app.js代码:“tabBar”:{“custom”:true,“color”:“#000000”,“selectedColor”:“#000000”,“backgroundColor”:“#000000”,“borderStyle”:“white”,“list”:[{“pagePath”:…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

小程序自定义tabbar

先做一下效果展示吧
在这里插入图片描述
在这里插入图片描述

本案例是按照官网来做的

app.js代码:

下面的list,官网说是必须的,但我感受不到它的用处

"tabBar": { 
   
    "custom": true,
    "color": "#000000",
    "selectedColor": "#000000",
    "backgroundColor": "#000000",
    "borderStyle": "white",
    "list": [
      { 
   
        "pagePath": "pages/page/index",
        "text": "首页",
        "iconPath": "/imgs/tab.png",
        "selectedIconPath": "/imgs/tab.png"
      },
      { 
   
        "pagePath": "pages/scroll/index",
        "text": "滚动",
        "iconPath": "/imgs/tab.png",
        "selectedIconPath": "/imgs/tab.png"
      }
    ]
  },
  "usingComponents": { 
   }

Jetbrains全家桶1年46,售后保障稳定

tabbar组件的创建

在这里插入图片描述
在根目录下创建custom-tab-bar目录,然后在该目录下新建组件component,注意是组件,不要建成page页面,虽然都一样是js/json/wxml/wxss四个文件

custom-tab-bar/index.js代码
data: { 
   
  curIndex: 0,
  color: "#00f",
  selectedColor: "#ff0",
  list: [
    { 
   
      pagePath: "/pages/page/index",
      iconPath: "/imgs/tab.png",
      selectedIconPath: "/imgs/tab1.png",
      text: "首页"
    }, { 
   
      pagePath: "/pages/scroll/index",
      iconPath: "/imgs/tab.png",
      selectedIconPath: "/imgs/tab1.png",
      text: "滚动"
    },
  ]
},
methods: { 
   
  switchTab(e) { 
   
    let url = e.currentTarget.dataset.url
    let index = e.currentTarget.dataset.index
    wx.switchTab({ 
   
      url
    })
    // this.setData({ 
   
    // curIndex:index
    // })
    wx.setStorageSync('curIndex', index)
  },
}
custom-tab-bar/index.wxml代码
<cover-view class="container">
  <cover-view class="item" bindtap='switchTab' wx:for="{ 
    {list}}" wx:key="{ 
    {index}}" data-index="{ 
    {index}}" data-url="{ 
    {item.pagePath}}">
    <cover-image class="icon" src='{ 
    {index==curIndex?item.selectedIconPath:item.iconPath}}'></cover-image>
    <cover-view class="text" class="{ 
    {index==curIndex?'textStyle':''}}">{
  
  {item.text}}</cover-view>
  </cover-view>
</cover-view>
custom-tab-bar/index.wxss代码
.container{ 
   
  height: 120rpx;
  background:green;
  display: flex;
}
.item{ 
   
  flex:1;
  text-align: center;
  display: flex;
  flex-direction: column;
  justify-content: space-around;
}
.icon{ 
   
  width:60rpx;
  height: 60rpx;
  margin:0 auto;
}
.textStyle{ 
   
  color:#fff;
}

最好给自定义tabbar设置一个高度,这样的话,如果页面需要用到scroll-view那高度也好控制,scroll-view的精确控制可以参考scroll的高度设置

最后,设置tabbar的选中状态,要在每个tab页面的onShow中设置
if (typeof this.getTabBar === 'function' && this.getTabBar()) { 
   
      this.getTabBar().setData({ 
   
        curIndex: 1
      })
    }
自定义tabbar就这样可以了

但是,
问题一:进入小程序第一次进行tabbar切换的时候有闪烁问题
问题二:本案例的启动页是首页,第一次切换到滚动也的时候除了闪烁问题外,scroll-view的高度也比正常情况下小了100rpx(正好是滚动页中topNav的高度),下图是滚动页代码

<view class="topNav"></view>
<scroll-view style="{ 
      { 
      'height:'+scrollHeight+'px'}}" scroll-y>
  <view class="red"></view>
  <view class="blue"></view>
  <view class="red"></view>
  <view class="blue"></view>
  <view class="red"></view>
  <view class="blue"></view>
</scroll-view>

所以本例的自定义tabbar就实现了
(ps:如果滚动页设置为启动页,就不会有问题二的出现)
闪烁问题,网上也找不到解决的办法,官网也未提及,希望有办法的朋友分享给我
如果想要避免上述问题,来一个完美的tabbar的话,就不要使用官网的方法,而采用单页面的形式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209948.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DropDownList1.Items.Insert 与 DropDownList1.Items.Add 的区别[通俗易懂]

    DropDownList1.Items.Insert 与 DropDownList1.Items.Add 的区别[通俗易懂]Add方法是把列表项插入下拉列表的尾部!Insert方法是把列表项插入下拉列表的指定位置!ListItem有两个属性Text用于显示的Value用于记录值,SelectedValue 是取选中项的ListItem的Value值,Items[DropDownList1.SelectedIndex].Text  是指定索引处ListItem的Text值,两者是不一样…

    2022年7月18日
    15
  • UART和USART的区别

    UART和USART的区别UART定义  UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。  通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输…

    2022年5月12日
    45
  • 滴滴开源夜莺Nightingale:企业级监控解决方案「建议收藏」

    滴滴开源夜莺Nightingale:企业级监控解决方案「建议收藏」导读:滴滴开源又双叒发布新开源项目啦——夜莺(Nightingale)是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的…

    2022年6月2日
    154
  • 安卓udp发包工具_好装逼牌udp-tcp发包工具

    安卓udp发包工具_好装逼牌udp-tcp发包工具这是好装逼牌udp-tcp发包工具,界面看着好像很牛逼,是不是草包自己实验吧,听说可以穿透安全狗和金盾冰盾之类的防火墙,黑软有风险使用需谨慎,不过玩黑软也有好处,有可能警察叔叔会帮你解决住房问题和吃住问题==!你懂吗?软件特点1.可收发TCP/UDP数据。2.对于TCP,支持服务器和客户端模式。3.支持多连接,可同时对多路网络连接进行操作。4.对于UDP,支持组播方式。5.可显示当前数据传输速度…

    2025年9月18日
    3
  • MySQL 实现行转列SQL

    MySQL 实现行转列SQL概述好久没写SQL语句,今天看到问答中的一个问题,拿来研究一下。问题链接:关于Mysql的分级输出问题情景简介学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列。数据表里面数据如下图,使用姓名+课程作为联合主键(有些需求可能不需要联合主键)。本文以MySQL为基础,其他数据库会有些许语法不同。数据库表数据:处理后的结果(行转列):方法一:这里可以使用Max,也可…

    2022年6月10日
    37
  • numba 高级用法

    numba 高级用法numba是一个用于编译Python数组和数值计算函数的编译器,这个编译器能够大幅提高直接使用Python编写的函数的运算速度。numba使用LLVM编译器架构将纯Python代码生成优化过的机器码,通过一些添加简单的注解,将面向数组和使用大量数学的python代码优化到与c,c++和Fortran类似的性能,而无需改变Python的解释器。Numba的主要特性:动态代码生成(…

    2025年7月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号