zoukankan      html  css  js  c++  java
  • 【微信小程序】微信小程序-实现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面试题及答案整理(持续更新)
    CentOS6.4-mini系统服务列表
    Linux内核编译,模块尺寸变大的解决办法
    Configuration Opennebula3.8 & 4.x Virtual Machines Contextualizing
    CentOS6.3上Opennebula 3.8 VLAN配置
    Ubuntu 12.04 LTS主机名、IP、DNS配置总结
    Linux su
    Git安装配置总结
    Linux CentOS添加163yum源
    Linux 内核编译 modules ehci-hcd, ohci-hcd, uhci-hcd not found
  • 原文地址:https://www.cnblogs.com/chengxs/p/11242199.html
Copyright © 2011-2022 走看看