支付寶小程序擴(kuò)展組件 橫向選項(xiàng)卡·Tabs

2020-09-18 11:19 更新

應(yīng)用當(dāng)需要展示二級以上內(nèi)容時,屏幕頂部會展示一個標(biāo)簽欄,并提供在應(yīng)用的不同部分之間快速切換的功能。標(biāo)簽欄在所有屏幕方向上保持相同的高度。 選項(xiàng):根據(jù)業(yè)務(wù)場景需要可以設(shè)定2個以上選項(xiàng),當(dāng)選項(xiàng)超過屏幕寬度后可以橫滑選項(xiàng)行查看所有內(nèi)容。 新內(nèi)容標(biāo)記:選項(xiàng)卡上能顯示未讀或者新內(nèi)容標(biāo)記。 場景描述:當(dāng)選項(xiàng)卡內(nèi)容提供給用戶自定義配置時提供編輯/新建入口,用戶可以由此進(jìn)入編輯頁面進(jìn)行修改。

說明:

  • 通過觸發(fā) onChange 事件,設(shè)置 setData 對應(yīng)的數(shù)據(jù),從而切換頁面上的 tabs 數(shù)據(jù);
  • 可使用 my.request 傳數(shù)據(jù)給后端。

掃碼體驗(yàn)

image

示例代碼

{
 "defaultTitle": "Tabs 橫向選項(xiàng)卡",
 "usingComponents": {
   "tabs": "mini-ali-ui/es/tabs/index",
   "tab-content": "mini-ali-ui/es/tabs/tab-content/index"
 }
}
<tabs
  tabs="{{tabs2}}"
  tabsName="activeTab2"
  onTabClick="handleTabClick"
  onChange="handleTabChange"
  onPlusClick="handlePlusClick"
  activeTab="{{activeTab2}}"
  showPlus="{{true}}"
  capsule="{{false}}"
  hasSubTitle="{{false}}"
  tabBarUnderlineWidth="20px"
  stickyBar="{{true}}"
>
  <block a:for="{{tabs2}}">
    <tab-content key="{{index}}" tabId="{{index}}" activeTab="{{activeTab2}}" a:if="{{index === 0}}">
      <view class="tab-content" style="height: 300px;">高度為 300px {{item.title}}</view>
    </tab-content>
    <tab-content key="{{index}}" tabId="{{index}}" activeTab="{{activeTab2}}" a:elif="{{index === 2}}">
      <view class="tab-content" style="height: 200px;">改變 tab-content 高度為 200px {{item.title}}</view>
    </tab-content>
    <tab-content key="{{index}}" tabId="{{index}}" activeTab="{{activeTab2}}" a:else>
      <view class="tab-content">content of {{item.title}}</view>
    </tab-content>
  </block>
</tabs>
Page({
  data: {
    tabs2: [
      {
        title: '選項(xiàng)',
        subTitle: '描述文案',
        number: '66',
        showBadge: true,
        badge: {
          arrow: false,
          stroke: true,
        },
      },
      {
        title: '選選',
        subTitle: '描述文案',
        number: '文字',
        showBadge: true,
        badge: {
          arrow: true,
        },
      },
      {
        title: '二二',
        subTitle: '描述文案',
        showBadge: true,
        number: 0,
      },
      {
        title: '選二',
        subTitle: '描述文案',
        number: '99+',
        showBadge: false,
      },
      {
        title: '項(xiàng)二',
        subTitle: '描述文案',
        number: '6',
      },
      {
        title: '二二',
        subTitle: '描述文案',
      },
      {
        title: '選二',
        subTitle: '描述文案',
      },
      {
        title: '項(xiàng)二',
        subTitle: '描述文案',
        number: '6',
      },
    ],
    activeTab2: 0,
  },
  handleTabClick({ index, tabsName }) {
    this.setData({
      [tabsName]: index,
    });
  },
  handleTabChange({ index, tabsName }) {
    this.setData({
      [tabsName]: index,
    });
  },
  handlePlusClick() {
    my.alert({
      content: 'plus clicked',
    });
  },
  onPageScroll({ scrollTop }) {
    // onPageScroll 主要是用于電梯組件(elevator 模式)滾動時的高度計算;
    // activeTab 被觸發(fā)高亮的 tab;
    // getFloorNumber 當(dāng)前 tab-content 所在的索引值;
    // this.data.floorNumber 將會有組件內(nèi)部根據(jù) tab-content 的高度計算;
    // ※※※ 當(dāng)使用 elevator 模式的 tabs 組件時,這部分的代碼請直接 copy 使用 ※※※
    if (scrollTop === 0) {
      this.setData({
        activeTab: 0,
        getFloorNumber: 0,
      });
    } else {
      // 電梯組件時需要添加,計算頁面滾動時,tab 的切換;
      for (let i = 0; i <= this.data.floorNumber.length; i++) {
        if (scrollTop >= this.data.floorNumber[i]) {
          this.setData({
            activeTab: i,
            getFloorNumber: i,
          });
        }
      }
    }
  },
});
.tab-content {
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 40rpx;
  box-sizing: border-box;
  /* 如果 swipeable="{{true}}",需要增加 height */
  /* height: 350px; */
  /* 為了體現(xiàn) stickyBar 的作用而增加的 tab-content 的高度 */
  height: 100vh;
}

屬性

tabs 橫向選項(xiàng)卡主要是由 <tabs><tab-content> 兩個標(biāo)簽組成,包含的類型較多,可通過 <tabs> 的屬性進(jìn)行配置

屬性 類型 默認(rèn)值 描述 必填 最低版本
className String - 自定義 class。 - -
activeCls String - 自定義激活 tabbar 的 class(設(shè)置字體樣式和寬度)。 - -
tabs Array - tab 數(shù)據(jù),其中包括選項(xiàng)標(biāo)題 title、副標(biāo)題(描述)文案 subTitle、膠囊形式 tab 中的數(shù)字 number,如需要以 badge 方式展示數(shù)字,添加 showBadge 并設(shè)置為 true 即可。 true 1.0.9 支持 showBadge
tabsName String - tab 選項(xiàng)卡的名字,與 activeTab 的 key 值相同 。 true -
activeTab Number 0 當(dāng)前激活的 Tab 索引。 true -
tabBarCls String - tabbar的自定義樣式 class。 - -
tabBarUnderlineColor String #1677FF 選中選項(xiàng)卡下劃線顏色。 - -
tabBarActiveTextColor String #1677FF 選中選項(xiàng)卡字體顏色。 - -
capsuleTabBarActiveTextColor String #ffffff 膠囊選中選項(xiàng)卡字體顏色。 - -
capsuleTabBarBackgroundColor String #e5e5e5 膠囊未選中的背景色 - 1.0.12
tabBarInactiveTextColor String #333333 未選中選項(xiàng)卡字體顏色。 - -
tabBarSubTextColor String #999999 未選中描述字體顏色。 - -
tabBarActiveSubTextColor String #ffffff 選中描述字體顏色。 - -
tabBarBackgroundColor String #ffffff 選項(xiàng)卡背景顏色。 - -
showPlus Boolean false 是否顯示 + icon。 - -
swipeable Boolean true tabs 內(nèi)容區(qū)是否可拖動。 - -
animation Boolean true 選項(xiàng)卡切換時滑動動畫。 - -
duration Number 500 tabs 內(nèi)容區(qū)切換動畫時長。 - -
capsule Boolean false 是否為膠囊 tab。 - -
hasSubTitle Boolean false 是否有副標(biāo)題(描述)內(nèi)容。 - -
elevator Boolean false 是否電梯組件。 - -
elevatorTop String 0px 電梯組件中 tab 置頂時的位置控制 - 1.0.8
elevatorContentTop Number 0 電梯組件中 tab-content 距離頂部的位置。 - 1.0.10
onPlusClick EventHandle () => {} + icon 被點(diǎn)擊時的回調(diào)。 - -
onTabClick EventHandle (index: Number,tabsName:String) => void tab 被點(diǎn)擊的回調(diào)。 - -
onChange EventHandle (index: Number,tabsName:String) => void tab 變化時觸發(fā)。 - -
tabsName String - tab 選項(xiàng)卡的名字,與 activeTab 的 key 值相同。 true -
tabBarUnderlineWidth String 100% 設(shè)置 tab 選項(xiàng)卡選中態(tài)的下劃線寬度 - 1.0.10
tabBarUnderlineHeight String 2px 設(shè)置 tab 選項(xiàng)卡選中態(tài)的下劃線高度 - 1.0.10
onTabFirstShow EventHandle (index: Number, tabsName: String) => {} tab 選項(xiàng)卡首次出現(xiàn)時的回調(diào) - 1.0.12
tabContentHeight String - 當(dāng) swipeable 為 true 時,可通過該屬性值重設(shè)高度強(qiáng)制讓 swiper 組件支持“自適應(yīng)”高度的行為 - 1.1.2
plusIcon String add icon 類型可參考 am-icon 類型 - 1.1.4
plusIconSize Number 16 改變 icon 大小 - 1.1.4
plusIconColor String - 改變 icon 顏色 - 1.1.4
plusImg String - 使用圖片替換 icon - 1.1.4
plusImgWidth String - 設(shè)置替換 icon 后的圖片寬度 - 1.1.4
plusImgHeight String - 設(shè)置替換 icon 后的圖片高度 - 1.1.4
stickyBar Boolean false tabBar 是否在頁面滾動的時候定位在頂部的某個位置,可結(jié)合 elevatorTop 設(shè)置距離頂部的位置。 false 1.1.5

tab-content

屬性 描述 類型 默認(rèn)值
index 列表項(xiàng)的唯一索引。 String -
tabId tab 內(nèi)容序列索引。 Number {{index}}
activeTab 選項(xiàng)卡當(dāng)前激活序列索引。 Number {{activeTab}}
elevator 電梯組件時需要指定。 Boolean false

Bug & Tip

  • capsule 為 true 時,tab 選項(xiàng)卡顯示為膠囊模式。
  • hasSubTitle 為 true 時,tabs 選項(xiàng)卡會顯示帶有描述的模式,但如果 tabs 數(shù)據(jù)中的 subTitle 為空,將不會顯示描述文案。
  • 當(dāng) tabs 選項(xiàng)卡為膠囊模式時,會根據(jù) tabs 數(shù)據(jù)中的 number 值顯示數(shù)字。
  • elevatortrue,則為電梯組件,<tab-content> 將豎排展示,自動計算每個 <tab-content> 的坐標(biāo)后,根據(jù)索引值定位指向;
    • elevator 模式中,this.data.floorNumber 將會根據(jù)所有 tab-content 的高度計算所得,無需修改;
    • 電梯組件需要考慮頁面滾動時判斷每個 tab-content 的位置,因此需要在頁面級別中加入 onPageScroll({ scrollTop }) {},具體可參考代碼示例中的代碼;
  • tabsName 是為了能更好獲取到當(dāng)前 tab 選項(xiàng)卡的名稱進(jìn)行識別,值需要與 activeTab 的 key 值相同,如:activeTab="{{activeTab2}}",那么 tabsName="activeTab2"。
  • tabs 中的 showBadge 為 true 時,number 中的值會以 badge 形式展示,并且不受 tab 類型影響,否則 number 中的值僅在膠囊 tab 中有效;
    • 可同時添加 badge: { arrow: true, stroke: true, } 控制 badge 的樣式;
    • arrow 可展示有箭頭的 badge,箭頭僅有左方向;
    • stroke 可展示有描邊的 badge;
  • 當(dāng) elevatorTop 的值為 px 單位時,elevatorContentTop 距離頂部的高度則是 elevatorTop + tab 選項(xiàng)卡的高度;
  • 當(dāng) plusImg 的值為空時才可以使用 plusIconplusIconSize 以及 plusIconColor這三個值;
  • 當(dāng) plusImg 的值為空時, plusImgWidthplusImgHeight 設(shè)置將無效;
  • 如果 plusIcon 為空, plusIconSizeplusIconColor 修改的是默認(rèn)的 icon 大小以及顏色;

tab-content 高度自適應(yīng)說明

tabs 組件內(nèi)容區(qū)域高度是否能夠自適應(yīng),需要注意 swipeable 的值:

  • swipeable='{{true}}':內(nèi)容區(qū)域可滑動,且相對應(yīng) tab 標(biāo)簽卡;但內(nèi)容區(qū)域高度為固定值,需要在 acss 文件中設(shè)定 height 值,否則高度會異常;如需要自適應(yīng)高度的話,那么請使用 tabContentHeight 重設(shè)高度,實(shí)現(xiàn)方法:點(diǎn)擊不同 tab 標(biāo)簽卡,獲取當(dāng)前 tab-content 的高度,賦值給 tabContentHeight 即可;
  • swipeable='{{false}}':內(nèi)容區(qū)域不可滑動,此時高度表現(xiàn)形式有兩種,且可以不需要在 acss 文件設(shè)定 height 值:
    • <tab-content> tabIdactiveTab 兩個屬性,此時的高度將以所有內(nèi)容區(qū)域中最高的為基準(zhǔn)展示;
    • <tab-content>包含 tabIdactiveTab 兩個屬性時 tabId="{{index}}" activeTab="{{activeTab}}",內(nèi)容區(qū)域所展示的高度將會隨著不同模塊的高度而改變。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號