• 【愚公系列】2022年08月 微信小程序-纵向和横向选项卡功能实现



    前言

    纵向选项卡(vtabs)用于让用户在不同的视图中进行切换。

    以下讲解的是weui版,相关的还有antd-mini版本:https://help.aliyun.com/document_detail/438087.html
    在这里插入图片描述

    一、纵向选项卡(weui版)

    vtabs

    属性名类型默认值必选描述
    vtabsArray[]yes数据项格式为{title}
    active-tabNumber0no激活选项卡索引
    tab-bar-classStringno选项卡样式
    active-classStringno行为样式
    tab-bar-line-colorString#ff0000no选定项目带下划线的一面的颜色
    tab-inactive-text-colorString#000000no未选中的字体颜色
    tab-bar-active-text-colorString#ff0000no检查字体颜色
    tab-inactive-bg-colorString#eeeeeeno未选中的背景色
    tab-active-bg-colorString#ffffffno检查背景颜色
    animationBooleantrueno打开动画
    Bindtablickeventhandleno触发时点击选项卡,e.detail={index}
    bindchangeeventhandleno内容区域滚动原因选项卡更改时触发,以及.detail={index}

    vtab-content

    属性名类型默认值必选描述
    tab-indexNumber0yesvtabs 数据索引(基于 0)

    1.安装包

    npm i @miniprogram-component-plus/vtabs
    npm i @miniprogram-component-plus/vtabs-content 
    
    • 1
    • 2

    2.使用

    引用组件

    "usingComponents": {
      "mp-vtabs": "@miniprogram-component-plus/vtabs/index",
      "mp-vtabs-content": "@miniprogram-component-plus/vtabs-content/index"
    }
    
    • 1
    • 2
    • 3
    • 4
    Page({
      data: {
        vtabs: [],
        activeTab: 0,
      },
    
      onLoad() {
        const titles = ['热搜推荐', '手机数码', '家用电器',
          '生鲜果蔬', '酒水饮料', '生活美食', 
          '美妆护肤', '个护清洁', '女装内衣', 
          '男装内衣', '鞋靴箱包', '运动户外', 
          '生活充值', '母婴童装', '玩具乐器', 
          '家居建材', '计生情趣', '医药保健', 
          '时尚钟表', '珠宝饰品', '礼品鲜花', 
          '图书音像', '房产', '电脑办公']
        const vtabs = titles.map(item => ({title: item}))
        this.setData({vtabs})
      },
    
      onTabCLick(e) {
        const index = e.detail.index
        console.log('tabClick', index)
      },
    
      onChange(e) {
        const index = e.detail.index
        console.log('change', index)
      }
    
    })
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    <mp-vtabs 
      vtabs="{{vtabs}}" 
      activeTab="{{activeTab}}" 
      bindtabclick="onTabCLick"
      bindchange="onChange"
      class="test"
    >
      <block wx:for="{{vtabs}}" wx:key="title" >
        <mp-vtabs-content tabIndex="{{index}}">
          <view class="vtabs-content-item">我是第{{index + 1}}项: {{item.title}}</view>
        </mp-vtabs-content>
      </block>
    </mp-vtabs>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    .vtabs-content-item {
        width: 100%;
        height: 300px;
        box-sizing: border-box;
        border-bottom: 1px solid #ccc;
        padding-bottom: 20px;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    二、横向选项卡(weui版)

    属性名类型默认值必选描述
    tabsArray[]yes数据项格式为{title}
    tab-classStringno选项卡样式
    swiper-classStringno内容区域刷卡器样式
    active-classStringno行为样式
    tab-underline-colorString#07c160no所选项目的下划线颜色
    tab-active-text-colorString#000000no检查字体颜色
    tab-inactive-text-colorString#000000no未选中的字体颜色
    tab-background-colorString#ffffffno选项卡背景色
    active-tabNumber0no激活选项卡索引
    durationNumber500no内容区交接持续时间
    Bindtablickeventhandleno触发时点击选项卡,e.detail={index}
    bindchangeeventhandleno内容区域滚动原因选项卡更改时触发,以及.detail={index}

    1.安装包

    npm install @ miniprogram-component-plus/tabs
    
    • 1

    2.使用

    引用组件

    "usingComponents": {
      "mp-tabs": "@miniprogram-component-plus/tabs/index"
    }
    
    • 1
    • 2
    • 3
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        active: 1,
        arr:['1','2','3','4'],
        tabs: [],
        arr2: [],
        activeTab: 0,
      },
      onLoad() {
        const titles = ['首页', '外卖', '商超生鲜', '购物', '美食饮品', '生活服务', '休闲娱乐', '出行']
        const tabs = titles.map(item => ({ title: item }))
        this.setData({ tabs })
        this.setData({ arr2: ['11', '22', '33', '44'] })
      },
    
      onTabCLick(e) {
        const index = e.detail.index
        console.log('----------'+index);
        this.setData({ activeTab: index })
      },
    
      onChange(e) {
        const index = e.detail.index
        console.log('----------'+index);
        this.setData({ activeTab: index })
      }
    })
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
     <mp-tabs 
      tabs="{{tabs}}" 
      activeTab="{{activeTab}}" 
      swiperClass="weui-tabs-swiper"
      bindtabclick="onTabCLick"
      bindchange="onChange"
      activeClass="tab-bar-title__selected"
    >
    
      <block wx:for="{{tabs}}" wx:key="title">
        <view class="tab-content" slot="tab-content-{{index}}" > {{item.title}} </view>
      </block>
    
    </mp-tabs>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    .bgView {
      /* background-color: orange; */
      height: 500px;
      width: 100%;
    }
    
    .bg {
      /* background: red; */
      /* position: fixed;
      top: 0;
      height: 40px; */
    }
    
    page {
      height: 100%;
    }
    
    /* ------------ weui -------------- */
    .weui-tabs-bar__wrp {
      border-bottom: 1px solid #eee;
      position: fixed;
      top: 0;
      height: 30px; 
      z-index:9999;
    }
    
    .weui-tabs-swiper {
      margin-top: 30px;
      width: 100%;
      height: 500px;
    }
    
    .tab-content {
      width: 100%;
      height: 500px;
      display: flex;
      justify-content: center;
      align-items: center;
      box-sizing: border-box;
      /* padding: 40rpx; */
    }
    
    .weui-tabs-bar__title {
      margin: 0px 10px;
    }
    
    .tab-bar-title__selected {
      font-size: 20px;
      font-weight: bold;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    在这里插入图片描述

  • 相关阅读:
    软件测试是个青春饭,怎么才能避免35岁危机?我想吃一辈子
    matlab测量计算信号的相似度
    浅述C++模板——函数模板及类模板
    JVM源码剖析之Thread类中sleep方法
    AWS认证SAA-C03每日一题
    MySQL 数据库的 DDL
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    软件工程阶段测试4
    Alook获取站点cookie详细教程
    Numpy、Matplotlib and Pandas
  • 原文地址:https://blog.csdn.net/aa2528877987/article/details/126613542