Skip to content

Collapse 折叠面板

折叠面板组件,用于内容折叠展开。

基础用法

html
<div id="demo-collapse"></div>

<script>
  const collapse = new SaCollapse('#demo-collapse', {
    items: [
      {
        name: '1',
        title: '一致性 Consistency',
        content: '与现实生活一致:与现实生活的流程、逻辑保持一致...'
      },
      {
        name: '2',
        title: '反馈 Feedback',
        content: '控制反馈:通过界面样式和交互动效让用户可以清晰的感知...'
      }
    ],
    activeNames: ['1'],
    onChange: (activeNames) => {
      console.log('激活的面板:', activeNames);
    }
  });
</script>
加载 SanoUI 组件中...
            
          

手风琴模式

通过 accordion: true 启用手风琴模式,同时只能展开一个面板。

html
<div id="demo-collapse-accordion"></div>

<script>
  const collapse = new SaCollapse('#demo-collapse-accordion', {
    accordion: true, // 手风琴模式
    items: [
      {
        name: '1',
        title: '一致性 Consistency',
        content: '与现实生活一致:与现实生活的流程、逻辑保持一致...'
      },
      {
        name: '2',
        title: '反馈 Feedback',
        content: '控制反馈:通过界面样式和交互动效让用户可以清晰的感知...'
      }
    ],
    activeNames: ['1']
  });
</script>
加载 SanoUI 组件中...
            
          

API

构造函数参数

参数说明类型默认值
container容器选择器或元素string | HTMLElement-
options配置选项SaCollapseOptions{}

配置选项

参数说明类型可选值默认值
items折叠面板项数组Array<CollapseItem>-[]
activeNames当前激活的面板名称数组Array<string>-[]
accordion是否开启手风琴模式boolean-false
onChange面板切换回调function(activeNames: string[])--

CollapseItem 配置

参数说明类型默认值
name面板唯一标识string-
title面板标题string-
content面板内容string-

方法

方法名说明参数返回值
setActiveNames设置激活的面板activeNames: string[]void
getActiveNames获取当前激活的面板-string[]
destroy销毁实例-void

示例代码

手动创建实例

javascript
const collapse = new SaCollapse('#my-collapse', {
  items: [
    {
      name: '1',
      title: '面板一',
      content: '这是面板一的内容'
    },
    {
      name: '2',
      title: '面板二',
      content: '这是面板二的内容'
    },
    {
      name: '3',
      title: '面板三',
      content: '这是面板三的内容'
    }
  ],
  activeNames: ['1'],
  accordion: false,
  onChange: (activeNames) => {
    console.log('当前激活的面板:', activeNames);
  }
});

// 设置激活的面板
collapse.setActiveNames(['2']);

// 获取当前激活的面板
const activeNames = collapse.getActiveNames();

手风琴模式

javascript
const collapse = new SaCollapse('#my-collapse', {
  accordion: true, // 手风琴模式
  items: [
    { name: '1', title: '面板一', content: '内容一' },
    { name: '2', title: '面板二', content: '内容二' },
    { name: '3', title: '面板三', content: '内容三' }
  ],
  activeNames: ['1']
});

实际使用场景

场景 1:常见问题 FAQ

使用折叠面板展示常见问题。

html
<div id="faq-collapse"></div>

<script>
  const collapse = new SaCollapse('#faq-collapse', {
    accordion: true,
    items: [
      {
        name: '1',
        title: '如何注册账号?',
        content: '点击页面右上角的"注册"按钮,填写相关信息即可完成注册。'
      },
      {
        name: '2',
        title: '如何找回密码?',
        content: '在登录页面点击"忘记密码",按照提示操作即可找回密码。'
      },
      {
        name: '3',
        title: '如何联系客服?',
        content: '您可以通过在线客服、电话或邮件的方式联系我们。'
      },
      {
        name: '4',
        title: '支持哪些支付方式?',
        content: '我们支持支付宝、微信支付、银行卡等多种支付方式。'
      }
    ],
    activeNames: [],
    onChange: (activeNames) => {
      console.log('当前展开的问题:', activeNames);
    }
  });
</script>
加载 SanoUI 组件中...
            
          

场景 2:设置面板

使用折叠面板组织设置项。

html
<div id="settings-collapse"></div>

<script>
  const collapse = new SaCollapse('#settings-collapse', {
    accordion: false,
    items: [
      {
        name: 'account',
        title: '账户设置',
        content: `
          <div style="padding: 1rem;">
            <div class="sa-form-item" style="margin-bottom: 1rem;">
              <label>用户名</label>
              <div class="sa-input" data-placeholder="请输入用户名" style="width: 100%;"></div>
            </div>
            <div class="sa-form-item">
              <label>邮箱</label>
              <div class="sa-input" data-type="email" data-placeholder="请输入邮箱" style="width: 100%;"></div>
            </div>
          </div>
        `
      },
      {
        name: 'notification',
        title: '通知设置',
        content: `
          <div style="padding: 1rem;">
            <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem;">
              <span>邮件通知</span>
              <div class="sa-switch" data-switch data-checked="true"></div>
            </div>
            <div style="display: flex; justify-content: space-between; align-items: center;">
              <span>短信通知</span>
              <div class="sa-switch" data-switch></div>
            </div>
          </div>
        `
      },
      {
        name: 'privacy',
        title: '隐私设置',
        content: `
          <div style="padding: 1rem;">
            <p>隐私设置内容</p>
          </div>
        `
      }
    ],
    activeNames: ['account']
  });
  
  SA.init('body');
</script>
加载 SanoUI 组件中...
            
          

Released under the MIT License.