UNPKG

zui

Version:

一个基于 Bootstrap 深度定制开源前端实践方案,帮助你快速构建现代跨屏应用。

302 lines (265 loc) 8.96 kB
section: javascript id: collapse description: 为元素提供折叠和展开功能 icon: icon-collapse filter: zhedie zd --- # 折叠 折叠插件使用直观的动画来展示或显示内容。 ## 结构 要实现折叠,一般需要两个元素: - 折叠内容元素,包含使用动画来切换显示或隐藏的内容,需要添加 `.collapse` 类,如果被折叠内容在一开始就是显示的,还需要为其添加 `.in` 类; - 触发元素,需要添加 `[data-toggle="collapse"]` 属性,并且使用 `[href]` 或 `[data-target="#selector"]` 属性来自定用于折叠内容元素。 ### 示例 <example> <p> <button type="button" class="btn" data-toggle="collapse" data-target="#collapseExample">使用 data-target 属性</button> <a href="#collapseExample" data-toggle="collapse" class="btn btn-link">直接使用 href 属性</a> </p> <div class="collapse" id="collapseExample"> <div class="bg-primary with-padding"> <p>被折叠元素内容。</p> <p>多个触发元素可以指向同一个折叠内容。</p> </div> </div> </example> ```html <p> <button type="button" class="btn" data-toggle="collapse" data-target="#collapseExample">使用 data-target 属性</button> <a href="#collapseExample" data-toggle="collapse" class="btn btn-link">直接使用 href 属性</a> </p> <div class="collapse" id="collapseExample"> <div class="bg-primary with-padding"> <p>被折叠元素内容。</p> <p>多个触发元素可以指向同一个折叠内容。</p> </div> </div> ``` ## 折叠分组 多个折叠如果放置在同一个父级容器元素内,可以创建一个折叠分组(手风琴效果),只需要为每个触发元素添加 `[data-parent="#selector"]` 属性,其属性值指向父级容器即可。 <example> <div id="accordion"> <p> <a href="#collapseExample1" data-toggle="collapse" data-parent="#accordion" class="btn btn-link">折叠 1</a> </p> <div class="collapse in" id="collapseExample1"> <div class="bg-primary with-padding"> <p>被折叠元素内容。</p> <p>多个触发元素可以指向同一个折叠内容。</p> </div> </div> <p> <a href="#collapseExample2" data-toggle="collapse" data-parent="#accordion" class="btn btn-link collapsed">折叠 2</a> </p> <div class="collapse" id="collapseExample2"> <div class="bg-success with-padding"> <p>被折叠元素内容。</p> <p>多个触发元素可以指向同一个折叠内容。</p> </div> </div> <p> <a href="#collapseExample3" data-toggle="collapse" data-parent="#accordion" class="btn btn-link collapsed">折叠 3</a> </p> <div class="collapse" id="collapseExample3"> <div class="bg-danger with-padding"> <p>被折叠元素内容。</p> <p>多个触发元素可以指向同一个折叠内容。</p> </div> </div> </div> </example> ```html <div id="accordion"> <p> <a href="#collapseExample1" data-toggle="collapse" data-parent="#accordion" class="btn btn-link">折叠 1</a> </p> <div class="collapse in" id="collapseExample1"> <div class="bg-primary with-padding"> <p>被折叠元素内容。</p> <p>多个触发元素可以指向同一个折叠内容。</p> </div> </div> <p> <a href="#collapseExample2" data-toggle="collapse" data-parent="#accordion" class="btn btn-link collapsed">折叠 2</a> </p> <div class="collapse" id="collapseExample2"> <div class="bg-success with-padding"> <p>被折叠元素内容。</p> <p>多个触发元素可以指向同一个折叠内容。</p> </div> </div> <p> <a href="#collapseExample3" data-toggle="collapse" data-parent="#accordion" class="btn btn-link collapsed">折叠 3</a> </p> <div class="collapse" id="collapseExample3"> <div class="bg-danger with-padding"> <p>被折叠元素内容。</p> <p>多个触发元素可以指向同一个折叠内容。</p> </div> </div> </div> ``` <style> #accordion > div + p {padding-top: 10px;} </style> ### 结合面板组使用 <example> <div class="panel-group" id="accordionPanels" aria-multiselectable="true"> <div class="panel panel-default"> <div class="panel-heading" id="headingOne"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordionPanels" href="#collapseOne"> 折叠面板 1 </a> </h4> </div> <div id="collapseOne" class="panel-collapse collapse in"> <div class="panel-body">折叠面板内容 1</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading" id="headingTwo"> <h4 class="panel-title"> <a class="collapsed" data-toggle="collapse" data-parent="#accordionPanels" href="#collapseTwo"> 折叠面板 2 </a> </h4> </div> <div id="collapseTwo" class="panel-collapse collapse"> <div class="panel-body">折叠面板内容 2</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading" id="headingThree"> <h4 class="panel-title"> <a class="collapsed" data-toggle="collapse" data-parent="#accordionPanels" href="#collapseThree"> 折叠面板 3 </a> </h4> </div> <div id="collapseThree" class="panel-collapse collapse"> <div class="panel-body">折叠面板内容 3</div> </div> </div> </div> </example> ```html <div class="panel-group" id="accordionPanels" aria-multiselectable="true"> <div class="panel panel-default"> <div class="panel-heading" id="headingOne"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordionPanels" href="#collapseOne"> 折叠面板 1 </a> </h4> </div> <div id="collapseOne" class="panel-collapse collapse in"> <div class="panel-body">折叠面板内容 1</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading" id="headingTwo"> <h4 class="panel-title"> <a class="collapsed" data-toggle="collapse" data-parent="#accordionPanels" href="#collapseTwo"> 折叠面板 2 </a> </h4> </div> <div id="collapseTwo" class="panel-collapse collapse"> <div class="panel-body">折叠面板内容 2</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading" id="headingThree"> <h4 class="panel-title"> <a class="collapsed" data-toggle="collapse" data-parent="#accordionPanels" href="#collapseThree"> 折叠面板 3 </a> </h4> </div> <div id="collapseThree" class="panel-collapse collapse"> <div class="panel-body">折叠面板内容 3</div> </div> </div> </div> ``` ## 使用方法 ### 手动初始化 通常情况下,直接使用 `[data-*]` 属性就可以使折叠正常工作,但也提供了手动使用 JavaScript 代码进行初始化方式。 - `$().collapse()` - `$().collapse(options)` 其中 `options` 参数为可以选的,用于指定初始化的选项,可用选项如下: <table class="table table-bordered"> <thead> <tr> <th>选项</th> <th>类型</th> <th>默认值</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>`parent`</td> <td>selector | `false`</td> <td>`false`</td> <td>可用设定一个选择器字符串,用于指定折叠分组的父级元素。</td> </tr> <tr> <td>`toggle`</td> <td>'true' | `false`</td> <td>`true`</td> <td>是否在初始化时显示折叠内容。</td> </tr> </tbody> </table> ```js $('#myCollapseContent').collapse({ toggle: false }); ``` ### 方法 #### `$().collapse('show')` 显示折叠内容。 #### `$().collapse('hide')` 隐藏折叠内容。 #### `$().collapse('toggle')` 切换显示折叠内容。 #### 调用方法 ```js // 显示折叠内容 $('#myCollapseContent').collapse('show') ``` ### 事件 当折叠内容显示或隐藏时会在折叠内容元素上触发以下事件: <table class="table table-bordered"> <thead> <tr> <th>事件</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>`show.zui.collapse`</td> <td>当折叠内容显示时触发。</td> </tr> <tr> <td>`shown.zui.collapse`</td> <td>当折叠内容显示后触发,此时动画已执行完毕。</td> </tr> <tr> <td>`hide.zui.collapse`</td> <td>当折叠内容隐藏时触发。</td> </tr> <tr> <td>`hidden.zui.collapse`</td> <td>当折叠内容隐藏后触发,此时动画已执行完毕。</td> </tr> </tbody> </table> ```js $('#myCollapseContent').on('hidden.zui.collapse', function () { console.log('折叠内容已隐藏。'); }) ```