zoukankan      html  css  js  c++  java
  • 微信小程序 自定义 Tab custom-tab-bar 点击刷新,回到首页

    前言:

    微信项目中需要做个二维码的功能,显示的时候要突出出来,So, 只能自定义了,先看一下我们要做成这个样子,看到这个阴影是不是有点恐慌,不要怕,很简单

    一、修改 app.json 文件,将 tabBar修改为自定义tab,list 保持不变,最多5个

      "tabBar": {
        "selectedColor": "#FB7F32",
        "borderStyle": "white",
        "custom": true, // 自定义tab
        "usingComponents": {},
       "list": [ { "pagePath": "pages/Home/index", "iconPath": "image/home.png", "selectedIconPath": "image/homeActive.png", "text": "组件" }, { "pagePath": "pages/Message/index", "iconPath": "image/message.png", "selectedIconPath": "image/messageActive.png", "text": "消息中心" }, { "pagePath": "pages/Home/index", "iconPath": "image/qrCode.png", "selectedIconPath": "image/qrCode.png", "text": "" }, { "pagePath": "pages/Home/index", "iconPath": "image/order.png", "selectedIconPath": "image/orderActive.png", "text": "订单" }, { "pagePath": "pages/Home/index", "iconPath": "image/mine.png", "selectedIconPath": "image/mineActive.png", "text": "我的" } ]

      

    二、在项目的根目录新建 custom-tab-bar,这个文件就是微信已经帮我们定义好了,只需要新增文件,就可以微信自动读取

    三、custom-tab-bar/index.wxml 写入,官网中提供,使用 cover-view 标签来操作,目前我这边是使用view,因为  cover-view 在向上滑动的时候,会带着tab 一起拖上去,不太好看,

     

    <view class="tab-bar" style="background: url('{{background}}') no-repeat; background-size: 100% auto">
      <view wx:for="{{list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab" >
        <view class="center_part" >
          <view class="center_part_code" wx:if="{{item.isSpecial}}">
            <image class=" center-has-noimg" src="../image/qrCode.png" ></image>
          </view>
          <image class=" center-has-image" src="{{selected === index ? item.selectedIconPath : item.iconPath}}" wx:else></image>
        </view>
        <view style="color: {{selected === index ? selectedColor : color}}" class="cover-text">{{item.text}}</view>
      </view>
    </view>
    

      

    四、custom-tab-bar/index.js 写入

    const app = getApp()
    
    Component({
      data: {
        selected: 0, // 目前tab所在的index 
        color: "#999", // 未选中颜色
        selectedColor: "#D0021B", // 选中颜色
      // tab 自定义配置需与index.json 保持一致 list: [{ pagePath: "/pages/Home/index", iconPath: "../image/home.png", selectedIconPath: "../image/homeActive.png", text: "首页", isSpecial: false }, { pagePath: "/pages/Message/index", iconPath: "../image/message.png", selectedIconPath: "../image/messageActive.png", text: "消息中心", isSpecial: false }, { pagePath: "/pages/pay/index", iconPath: "image/icon_API.png", selectedIconPath: "image/icon_API_HL.png", text: "", isSpecial: true }, { pagePath: "/index/index2", iconPath: "../image/order.png", selectedIconPath: "../image/orderActive.png", text: "历史订单", isSpecial: false }, { pagePath: "/index/index2", iconPath: "../image/mine.png", selectedIconPath: "../image/mineActive.png", text: "我的", isSpecial: false }], }, methods: {
      // 切换 tab 事件 switchTab(e) { let that = this const idx = e.currentTarget.dataset.index const path = e.currentTarget.dataset.path // 跳转页面 wx.switchTab({ url: path, }) that.setData({ selected: idx }) } } })

      

    五、custom-tab-bar/index.wxss 写入

    .tab-bar {
      position: fixed;
      bottom: 0;
      left: 0;
      right: 0;
      height: 90rpx;
      display: flex;
      padding-bottom: env(safe-area-inset-bottom);
      z-index: 99;
      position: relative;
      padding-top: 17rpx;
    }
     
    .tab-bar-item {
      flex: 1;
      text-align: center;
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
    }
     
    .tab-bar-item cover-image {
       27px;
      height: 27px;
    }
     
    .tab-bar-item .cover-text {
      font-size: 10px;
    }
    .txt{
      color: #aaaaaa;
    }
    .fontWeight{
      font-weight: bold;
    }
    .bg_rec{
      background: #ffd324;
       80rpx;
      min-height: auto;
      height: 20rpx;
      margin-top: -28rpx;
      vertical-align: text-bottom;
      border-radius: 0;
      z-index: -10;
    }
    .center_img{
       100rpx;
      height: 100rpx;
      transform: translate(-50%);
      left: 50%;
      bottom:0;
    }
    .center-has-noimg{
       100%;
      height: 100%;
    }
    .center-has-image{
       35rpx;
      height: 35rpx;  
    }
    .center_part_code{
      padding: 10rpx;
      box-shadow: 0 0 0 #000;
      /*  100rpx;
      height: 100rpx; */
      position: absolute;
      top: -30px;
      z-index: 10;
       106rpx;
      height: 106rpx;
      transform: translate(-50%);
      left: 50%;
    }
    

      

    六、查看效果

    发现:view 一直定在下部,滑动的时候不太好看,我这边在 每个switchTab页面的json 中配置了,禁止滚动,在页面内给 父级设置 overflow: scroll,( switchtab页面为tabBar 中list 配置的页面)

    七、总结问题

    1. 进入首页,点击其他tab,页面会刷新,tabindex 会再次回到首页

      解决方案:在每个 switchtab页面 中写入以下 ,( switchtab页面为tabBar 中list 配置的页面)

      onShow:function (params) {
        if (typeof this.getTabBar === 'function' && this.getTabBar()) {
          this.getTabBar().setData({
            selected: 0  // 数字是当前页面在tabbar的索引,如我的查询页索引是2,因此这边为2,同理首页就为0,消息中心页面为1
          })
        }
      },
    

      

  • 相关阅读:
    .net 中文显示乱码问题(Chinese display with messy code)
    Compare the value of entity field.
    人见人爱A^B 题解
    人见人爱A-B 题解
    全局变量
    第39级台阶 题解
    马虎的算式 题解
    做题技巧
    inline用法
    queue函数用法
  • 原文地址:https://www.cnblogs.com/gqx-html/p/13595400.html
Copyright © 2011-2022 走看看