首页 > 其他分享 >自定义tabbar

自定义tabbar

时间:2024-01-21 15:56:37浏览次数:40  
标签:index bar tabbar 自定义 text item tab pages

[基础能力 / 自定义 tabBar (qq.com)]

1.在app.json中

在原来的tabbar配置里面顶部添加  “custom”:true;

添加   "usingComponents": {},

  "tabBar": {
    "custom": true,
    "color": "#000",
    "selectedColor": "blue",
    "backgroundColor": "#fff",
    "borderStyle": "black",
    "list":[{
      "pagePath": "pages/index/index",
      "text": "首页"
    },
    {
      "pagePath": "pages/find/find",
      "text": "发现"
    },
    {
      "pagePath": "pages/circle/circle",
      "text": "+"
    },
    {
      "pagePath": "pages/message/message",
      "text": "消息"
    },
    {
      "pagePath": "pages/mine/mine",
      "text": "我的"
    }]
  },
  "usingComponents": {},

  注:我没有配置图标

2.在pages同级建一个自定义组件文件夹custom-tab-bar,里面新建组件index

 3.开始编写custom-tab-bar

index.wxml中:

<view class="tab-bar">
    <view class="tab-bar-border"></view>
    <block wx:for="{{list}}" wx:key="index">
        <view wx:if="{{item.isSpecial}}" class="tab-bar-item" data-path="{{item.pagePath}}" data-click="{{ item.isSpecial || false }}" data-index="{{index}}" bindtap="switchTab">
            <view class="special-image">
                <image class="special-image-pic" mode="aspectFit" src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></image>
            </view>
            <view style="color: {{selected === index ? selectedColor : color}}" class="special-text tab-text">{{item.text}}</view>
        </view>
        <view wx:else class="tab-bar-item" data-path="{{item.pagePath}}" data-click="{{ item.isSpecial }}" data-index="{{index}}" bindtap="switchTab">
            <image class="item-image" mode="aspectFit" src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></image>
            <view class="tab-text" style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</view>
        </view>
    </block>
</view>

 

index.wxss中:

.tab-bar {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 96rpx;
  background-color:rgb(64, 129, 111);
  display: flex;
  padding-bottom: env(safe-area-inset-bottom);
}

.tab-bar-border {
  background-color: rgba(0, 0, 0, 0.33);
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 2rpx;
  transform: scaleY(0.5);
}

.tab-bar-item {
  flex: 1;
  text-align: center;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}

.tab-bar-item .item-image {
  width: 36rpx;
  height: 36rpx;
}

.tab-bar-item .special-image {
  position: absolute;
  top: -36rpx;
  width: 96rpx;
  height: 96rpx;
  border-radius: 50%;
  border-top: 2rpx solid #f2f2f3;
  background-color: #fff;
  text-align: center;
  box-sizing: border-box;
  padding: 6rpx;
}

.tab-bar-item .special-image .special-image-pic {
  width: 100%;
  height: 100%;
}

.tab-bar-item .tab-text {
  margin-top: 4rpx;
  font-weight: 600;
}

.tab-bar-item .special-text {
  margin-top: 44rpx
}

.tab-bar-item .tab-text {
  font-size: 10px;
}

 

index.js中:

Component({
  data: {
    selected: 0,//当前选中的tab下标
    color: "#1E1E1E",
    selectedColor: "#f6f6f6",//tabbar选中字体颜色
        list: [{
                "pagePath": '/pages/index/index',
                "text": "首页"
            },{
                "pagePath": '/pages/find/find',
                "text": "发现"
            },
            {
                "pagePath": '/pages/circle/circle',
                "text": "+",
        "isSpecial": true
      },
      {
                "pagePath": '/pages/message/message',
                "text": "消息"
            },
            {
        "pagePath": '/pages/mine/mine',
                "text": "我的"
            }
        ],//tabbar循环数据集
  },
  attached() {
  },
  methods: {
    switchTab(e) {
        let data = e.currentTarget.dataset;
          //跳转页面为例
          let url = data.path;
           this.setData({
               selected: data.index
          })
          // 跳转到 tabbar 页,关闭其他所有非 tabbar 页
           wx.switchTab({ url });
    }
}

})

 

 index.json中:

{
  "component": true
}

4.app.js中编写全局函数,控制页面选中状态

  getCurrentTabbar(selected, that) {
    console.log(that.getTabBar());
    console.log(selected);
    if (typeof that.getTabBar === 'function' && that.getTabBar()) {
        that.getTabBar().setData({
            selected: selected
        })
    }
  },

5.在每个tabbar页面调用

 const app = getApp(); 
app.getCurrentTabbar(当前页面在list列表中的index, this); 

 6.完成自定义tabbar,来看一下效果

 

标签:index,bar,tabbar,自定义,text,item,tab,pages
From: https://www.cnblogs.com/yheyi/p/17975040

相关文章

  • 自定义排序
    问题:如何对数据进行自定义排序函数解决:=SORTBY(A2:A21,MATCH(A2:A21,E2:E11,))按自定义序列排序:选取数据中任一单元格》数据(或开始)》排序》自定义排序》勾选包含标题》次序》自定义序列》选取》确定》确定设置自定义序列:选取数据》文件》选项》自定义序列》从单元格导......
  • 死磕Spring之IoC篇 - 解析自定义标签(XML 文件)
    解析自定义标签(XML文件)上一篇《BeanDefinition的解析阶段(XML文件)》文章分析了Spring处理 org.w3c.dom.Document 对象(XMLDocument)的过程,会解析里面的元素。默认命名空间(为空或者 http://www.springframework.org/schema/beans)的元素,例如 <bean/> 标签会被解析成Generic......
  • 微信小程序自定义顶部tap栏
    第一步:隐藏原生导航栏效果                        (默认效果)json中配置: "window": {   "navigationStyle": "custom"  } (成功去除顶部tab栏,只留下了胶囊,但轮播图直接与顶部图标融在一起了)第二步:适应各种手机......
  • STM32CubeMX教程18 DAC - DMA输出自定义波形
    1、准备材料开发板(正点原子stm32f407探索者开发板V2.4)STM32CubeMX软件(Version6.10.0)野火DAP仿真器keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动一台示波器逻辑分析仪nanoDLA2、实验目标使用STM32CubeMX软件配置STM32F407开发板的DACOUT1实现输出0-3.3V周期为12.8ms的正弦......
  • 用户自定义模板中数据区域
    在实际的Word文档开发中,经常需要自动填充数据到Word模板中,以生成动态的Word文档,那么应该如何编辑制作Word模板呢?方法一:直接打开Word文件插入书签假如使用数据区域(DataRegion)来定义模板中动态填充数据的位置,那么直接打开一个Word文件,在其中添加“PO_”开头的书签即可制作word模板......
  • HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例
    HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例声明式UIArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。如果组件的接口定义没有包含必选构造参数,则组件后面的“()”......
  • MFC 自定义控件添加 tip
    一、要求1.自定义tip提示并实时提示,跟随鼠标移动2.避免重复刷导致tip闪烁3.picture控件添加自定义变量二、tip涉及2.1CMFCToolTipCtrl、CMFCToolTipInfoCMFCToolTipCtrl*m_ptooltip;//注册控件、传递提示消息CMFCToolTipInfo*m_ttinfo;//样式处理......
  • vue+antd-vue(自定义iconfont图标组件)
    1.方式一代码如下import{createFromIconfontCN}from'@ant-design/icons-vue';constIconFont=createFromIconfontCN({scriptUrl:newURL('./assets/font/iconfont.js',import.meta.url).href});app.component('IconFont',IconFont);......
  • Win10如何设置闹钟提醒?win10电脑自定义闹钟提醒的方法
    上班族在繁忙的工作中,有时候需要在电脑上设置醒闹钟提醒,以确保按时完成工作或者提醒自己关注某些事项。想想一下,你在某一天需要参加一个重要的会议,为了不错过会议的开始时间,设置一个电脑上的醒闹钟提醒是十分必要的。此外上班族通常有各种工作任务需要按时完成,这就需要分阶段提醒......
  • JAVA自定义注解
     importjava.lang.annotation.*;//定义一个自定义注解public@interfaceMyAnnotation{//在注解中定义属性Stringvalue()default"";}//使用自定义注解classMyClass{//在类上应用自定义注解@MyAnnotation(value="Hello")pu......