• 【微信小程序】微信小程序-实现tab


    一、前言

    小程序开发中,有很多封装好的控件供开发者使用,但是,很常见的tab选项卡居然没有,只能自己搞一个。

    实现原理也很简单,无非是用给view(tab)设置一个点击事件bintap,并且给view(tab)一个data-idx索引,根据当前index来改变tab的状态并决定swiper显示那个内容,改变swiper的内容只需要改变swiper的current就好。

    二、效果

    三、实现

    wxml

    <view class='ticket-container'>
        <scroll-view scroll-y bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" scroll-into-view="{{toView}}"
          scroll-top="{{scrollTop}}">
          <!--Tab布局-->
          <view class='title'>
            <view class="{{0 == currentIndex ? 'title-sel-selected' : 'title-sel'}}" bindtap='titleClick' data-idx='0'>
              <text>未使用</text>
              <hr class="line-style"/>
            </view>
            
            <view class="{{1 == currentIndex ? 'title-sel-selected' : 'title-sel'}}" bindtap='titleClick' data-idx='1'>
              <text>已使用</text>
              <hr class="line-style"/>
            </view>
            <view class="{{2 == currentIndex ? 'title-sel-selected' : 'title-sel'}}" bindtap='titleClick' data-idx='2'>
              <text>已过期</text>
              <hr class="line-style" />
            </view>
          </view>
    
          <!--内容布局-->
          <swiper class='swiper' bindchange='pagechange' current='{{currentIndex}}'>
            <swiper-item class='swiper'>
              <view wx:for="{{firstList}}" wx:for-item="item" class='record-item'>
                <view class='name'>
                  <span>名称:{{item.name}}</span>
                  <span>面额:{{item.money}}</span>
                </view>
              </view>
            </swiper-item>
            <swiper-item class='swiper' class='swiper'>
              <view wx:for="{{secondList}}" wx:for-item="item" class='record-item'>
                <view class='name'>
                  <span>名称:{{item.name}}</span>
                  <span>面额:{{item.money}}</span>
                </view>
              </view>
            </swiper-item>
            <swiper-item class='swiper' class='swiper'>
              <view wx:for="{{thirdList}}" wx:for-item="item" class='record-item'>
               <view class='name'>
                  <span>名称:{{item.name}}</span>
                  <span>面额:{{item.money}}</span>
                </view>
              </view>
            </swiper-item>
          </swiper>
        </scroll-view>
    </view>

    js文件

    // pages/mine/mine.js
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        currentIndex: 0,
        "firstList": [{ name: 'w券1', money: '5.00' }, { name: 'w券2', money: '50.00'}],
        "secondList": [{ name: 'y券1', money: '10.00' }, { name: 'y券2', money: '20.00' }],
        "thirdList": [{ name: 'g券1', money: '30.00' }, { name: 'g券2', money: '40.00' }],
      },
    
      //swiper切换时会调用
      pagechange: function (e) {
        if ("touch" === e.detail.source) {
          let currentPageIndex = this.data.currentIndex
          currentPageIndex = (currentPageIndex + 1) % 3
          this.setData({
            currentIndex: currentPageIndex
          })
        }
      },
      //用户点击tab时调用
      titleClick: function (e) {
        let currentPageIndex =
          this.setData({
            //拿到当前索引并动态改变
            currentIndex: e.currentTarget.dataset.idx
          })
      }
    
    })

    wxss文件

    .container {
      height: 100%;
      min-height: 100%;
      display: flex;
      flex-direction: column;
      box-sizing: border-box;
    }
    
    .title {
       100%;
      height: 88rpx;
      background: white;
      display: flex;
      align-items: center;
      justify-content: space-around;
    }
    
    .title-sel {
      color: #24272c;
      font-size: 32rpx;
      display: flex;
      flex-direction: column;
      align-items: center;
    }
    
    .title-sel  .line-style{
      background: #fff;
      height: 6rpx;
       40rpx;
      position: relative;
      margin-top: 10rpx;
    }
    
    .title-sel-selected{
      color: #006bff;
      font-size: 32rpx;
      display: flex;
      flex-direction: column;
      align-items: center;
    }
    .title-sel-selected .line-style{
      background: #006bff;
      height: 6rpx;
       90rpx;
      position: relative;
      margin-top: 10rpx;
    }
    
    .swiper {
       90%;
      flex: 1;
      overflow: scroll;
      margin: 0 auto;
    }
    
    .record-item {
      margin-top: 10rpx;
      background-color: white;
      padding-bottom: 5rpx;
      padding-top: 5rpx;
      font-size: 30rpx;
    }
    
    .name{
      display: flex;
      justify-content: space-between;
      border: 1px solid #eee;
      padding: 2vh;
      border-radius: 10rpx
    }

    四、参考官方文档

    那么当内容改变时,我们也要改变tab选项卡的状态,这时候我们给swiper来一个bindchange,同样是官方文档

  • 相关阅读:
    Java中如何判断一个字符串是否为数字
    Web发展简史
    常用编程语言
    浏览器运行原理
    [LeetCode]69. x 的平方根(数学,二分)
    [计算机网络]TCP/IP协议-运输层
    [剑指Offer]33-根据后序序列判断是否能组成BST
    [剑指Offer]17-打印从1到最大的n位数(递归)
    [剑指Offer]56-数组中数字出现的次数(位运算)
    [剑指Offer]18-题目一:删除链表的节点 题目二:删除链表中重复节点
  • 原文地址:https://www.cnblogs.com/chengxs/p/11242199.html
Copyright © 2020-2023  润新知