uni-app 自定义底部导航栏

·  阅读 1112

这是我目前发现较好的uni-app 自定义底部导航栏方法,其他方法的缺点主要是在切换时,要么会闪烁,要么会每点击一下,都会请求一次数据。如果有其他更好的方法,欢迎评论留言,最近才开始用uni-app写项目,之前只是看了下文档。

1. tabbar 组件

<template>
  <view class="tabbar-container">
    <view
      :style="{ color: currentIndex == index ? '#007EFF' : '#333333' }"
      v-for="(item, index) in tabbarList"
      :key="index"
      style="flex: 1"
      @click="switchTab(index)"
    >
      <view :class="'iconfont ' + item.icon" />
      <view class="title">{{ item.title }}</view>
    </view>
  </view>
</template>

mounted(){
	let dom = uni.createSelectorQuery().select('.tabbar-container')
    dom.boundingClientRect(e => {
    	// tabbarHeight使用频次较高,就设为全局变量了
        getApp().globalData.tabbarHeight = e.height
    }).exec()
}

<style scoped lang="scss">
.iconfont {
  font-size: 18px;
}

.tabbar-container {
  display: flex;
  justify-content: space-evenly;
  text-align: center;
  padding: 10px 0;
  background-color: #fff;
  box-shadow: 0 -1.5px 3px #eee;
  z-index: 999;

  .title {
    font-size: 12px;
  }
}
</style>
复制代码

2. 引入

这里使用的是swiper,duration为0是为了关闭页面切换动画效果,

<template>
  <view :style="'height: calc(100vh - ' + tabbarHeight + 'px)'">
    <tab-bar
      :currentIndex="currentIndex"
      class="tabbar-container"
      @getCurrentIndex="getCurrentIndex"
    />
    <swiper duration="0" disable-touch :current="currentIndex" style="height: 100%">
      <swiper-item>
        <scroll-view scroll-y style="height: 100%">
          <home />
        </scroll-view>
      </swiper-item>
      <swiper-item>
        <todo-page />
      </swiper-item>
      <swiper-item>
        <launch-task />
      </swiper-item>
      <swiper-item>
        <my-page />
      </swiper-item>
    </swiper>
  </view>
</template>

mounted() {
  this.tabbarHeight = getApp().globalData.tabbarHeight
},

getCurrentIndex(e) {
  this.currentIndex = e;
}
复制代码
分类:
前端
标签: