折叠面板(Collapse)

可以折叠/展开的内容区域,对复杂区域进行分组和隐藏,保持页面的整洁。

重要

  • 手风琴是一种特殊的折叠面板,只允许单个内容区域展开。

  • Collapse 组件与 CollapseItem 组件必须有相同的 uid,且 uid 页面唯一。

属性

Collapse

属性

类型

必填

默认值

说明

name

string[]

[]

当前激活的索引

accordion

boolean

-

是否是手风琴模式,仅一个内容被展开。

uid

string

-

当页面有多个 Collapse 时需传入 uid,且页面必须唯一 ,与内部的 CollapseItem 组件的 uid 一致。

className

string

-

类名

CollapseItem

属性

类型

必填

默认值

说明

title

string

-

标题栏内容

name

string

-

标识,必须唯一

uid

string

-

当页面有多个 Collapse 时需传入 uid,必须页面唯一 ,与外部的 CollapseItem 组件的 uid 一致。

className

string

-

类名

事件

Collapse

事件名

说明

类型

onChange

面板展开/收缩时,获取当前展开的面板。

( value : string[]) => void

插槽

插槽名称

说明

title

CollapseItem 组件标题插槽,当 title 属性存在时,插槽不生效。

样式类

Collapse

类名

说明

amd-avatar

整体样式

amd-avatar-src

图片样式

amd-avatar-content

头像描述样式

amd-avatar-name

name 样式

amd-avatar-desc

desc 样式

CollapseItem

类名

说明

amd-avatar

整体样式

amd-avatar-src

图片样式

amd-avatar-content

头像描述样式

amd-avatar-name

name 样式

amd-avatar-desc

desc 样式

代码示例

基本使用

index.axml 的代码示例如下:

<view>
  <demo-block title="基础用法" padding="0">
    <collapse 
      name="{{['item-0']}}" 
      onChange="onChange" 
      uid="collapse-0" 
      accordion="{{false}}">
      <collapse-item 
        title="第一项" 
        uid="collapse-0" 
        name="item-0">
        Pariatur dolore commodo commodo elit adipisicing sunt adipisicing ex duis labore nisi sunt. Magna ut minim deserunt. Sunt velit occaecat incididunt aliqua. Dolore officia voluptate aute reprehenderit anim excepteur elit.
      </collapse-item>
      
      <collapse-item 
        name="item-1" 
        title="第二项" 
        uid="collapse-0">
        Dolor reprehenderit cillum aliqua qui id Lorem elit anim do minim mollit. Commodo id cupidatat est tempor anim. Fugiat ipsum dolor nostrud officia mollit. Aliquip aliqua pariatur tempor excepteur commodo non et adipisicing magna ex nostrud dolore cillum exercitation enim. In sunt velit laboris ullamco et in reprehenderit sit excepteur aute in dolor. Sunt minim incididunt consectetur laborum sint fugiat voluptate sunt culpa fugiat duis. Ad consectetur ad aliquip aute labore magna commodo est cupidatat.
      </collapse-item>
    
      <collapse-item 
        title="第三项" 
        name="item-2" 
        uid="collapse-0">
        Ad ut ullamco exercitation do excepteur ipsum ipsum consectetur nulla fugiat est et. Occaecat ullamco nulla mollit cupidatat dolore nulla minim cillum proident laboris mollit. Veniam consectetur esse consectetur. Fugiat in laborum anim.
      </collapse-item>
      
    </collapse>
  </demo-block>
  <demo-block title="手风琴模式"  padding="0">
    <collapse 
      name="{{['item-0']}}" 
      onChange="onChange" 
      uid="collapse-1" 
      accordion>
      <collapse-item 
        title="第一项" 
        uid="collapse-1" 
        name="item-0">
        手风琴模式只能同时展开一个
      </collapse-item>
      
      <collapse-item 
        name="item-1" 
        title="第二项" 
        uid="collapse-1">
        手风琴模式只能同时展开一个
      </collapse-item>
    
      <collapse-item 
        title="第三项" 
        name="item-2" 
        uid="collapse-1">
        手风琴模式只能同时展开一个
      </collapse-item>
    </collapse>
  </demo-block>

</view>

index.js 的代码示例如下:

Page({
  data: {
   
  },
});

index.json 的代码示例如下:

{
  "defaultTitle": "Collapse",
  "usingComponents": {
    "collapse": "antd-mini/es/Collapse/index",
    "collapse-item": "antd-mini/es/Collapse/CollapseItem/index",
    "icon": "antd-mini/es/Icon/index",
    "demo-block": "../../components/DemoBlock/index"
  }
}

自定义模式

index.axml 的代码示例如下:

<view>
  <demo-block title="禁用状态" padding="0">
    <collapse 
      className="demo-collapse" 
      uid="collapse-1" 
      accordion="{{false}}">
      <collapse-item 
        title="第一项" 
        uid="collapse-1" 
        name="item-0">
        这里是第一项的内容
      </collapse-item>
      
      <collapse-item 
        name="item-1" 
        uid="collapse-1"
        disabled="{{true}}"
        title="第二项">
        这里是第二项的内容
      </collapse-item>

      <collapse-item 
        name="item-2" 
        uid="collapse-1"
        disabled="{{true}}"
        title="第二项">
        这里是第三项的内容
      </collapse-item>
    </collapse>
  </demo-block>
  <demo-block title="自定义图标" padding="0">
    <collapse 
      className="demo-collapse" 
      uid="collapse-2" 
      accordion="{{false}}">
      <collapse-item 
        uid="collapse-2" 
        name="item-0">
        <view slot="title">
          <icon type="FireFill" size="small"/>
          <text style="color: red; padding-left:12px">title 插槽</text>
        </view>
        自定义图标
      </collapse-item>
      
      <collapse-item 
        name="item-1" 
        uid="collapse-2"
        expandIcon="AddOutline"
        closeIcon="MinusOutline"
        brief="辅助信息">
        <view slot="title">
          <text style="color: red; padding-right:8px">title 插槽</text>
          <icon type="FireFill" size="small"/>
        </view>
        自定义图标
      </collapse-item>
    </collapse>
  </demo-block>
  <demo-block title="受控模式" padding="0">
    <collapse 
      className="demo-collapse" 
      name="{{name}}" 
      onChange="handleChange" 
      uid="collapse-0" 
      accordion="{{false}}">
      <collapse-item 
        title="自适应高度" 
        uid="collapse-0" 
        name="item-0">
        <view class="item-content">
          <view>内容区域</view>
        </view>
      </collapse-item>
      
      <collapse-item 
        name="item-1" 
        uid="collapse-0">
        <view slot="title">
          <text style="color: red;">title 插槽</text>
        </view>
        <view class="item-content content2">
          <view>内容区域</view>
        </view>
      </collapse-item>
    
      <collapse-item 
        title="标题" 
        name="item-2" 
        uid="collapse-0">
        <view class="item-content content3">
          <view>内容区域</view>
        </view>
      </collapse-item>
      
      <collapse-item 
        title="标题" 
        name="item-3" 
        uid="collapse-0">
        <view class="item-content content3">
          <view>内容区域</view>
        </view>
      </collapse-item>
    </collapse>
    <button onTap="handleControl">随机展开一项</button>
  </demo-block>
</view>

index.js 的代码示例如下:

Page({
  data: {
    name: ['item-1'],
  },
  handleChange(e) {
    this.setData({ name: e });
    console.log(e);
  },
  handleControl() {
    const getRandom = () => {
      const random = Math.random();
      return random < 0.25 ? 0 : random < 0.5 ? 1 : random < 0.75 ? 2 : 3;
    };
    const { name } = this.data;
    let newName = [];
    if (name.length === 1) {
      let randonIndex;
      // eslint-disable-next-line no-constant-condition
      while (true) {
        randonIndex = getRandom();
        if (randonIndex !== Number(name[0].substring(5))) {
          break;
        }
      }
      newName = [`item-${randonIndex}`];
    } else {
      newName = [`item-${getRandom()}`];
    }
    this.setData({
      name: newName,
    });
  },
});

index.acss 的代码示例如下:

.item-content {
  font-size: 34rpx;
  color: #333;
  line-height: 48rpx;
  background-color: white;
}
.amd-icon {
  font-size: 22px;
}

index.json 的代码示例如下:

{
  "defaultTitle": "Collapse:自定义",
  "usingComponents": {
    "collapse": "antd-mini/es/Collapse/index",
    "collapse-item": "antd-mini/es/Collapse/CollapseItem/index",
    "icon": "antd-mini/es/Icon/index",
    "demo-block": "../../components/DemoBlock/index",
    "button": "antd-mini/es/Button/index"
  }
}