本篇文章給大家詳細(xì)介紹一下Bootstrap中的手風(fēng)琴效果。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)大家有所幫助。
Bootstrap 框架中 Collapse插件(折疊)其實(shí)就是我們常見的手風(fēng)琴效果。當(dāng)單擊一個(gè)觸發(fā)元素時(shí),在另外一個(gè)可折疊區(qū)域進(jìn)行顯示或隱藏,再次單擊時(shí)可以反轉(zhuǎn)顯示狀態(tài)。
經(jīng)典的場(chǎng)景是多個(gè)折疊區(qū)域的手風(fēng)琴風(fēng)格以及單一title/content的風(fēng)格。
結(jié)構(gòu)
手風(fēng)琴最關(guān)鍵的部分,就是每個(gè)標(biāo)題對(duì)應(yīng)有一個(gè)內(nèi)容,在Bootstrap框架中將這兩個(gè)部分組合起來(lái)稱為一個(gè)panel面板,如下邊效果所示,有三個(gè)panel面板,將這三個(gè)面板組合在一起,就是一個(gè)面板組合 panel-group,也就是手風(fēng)琴的結(jié)構(gòu)
簡(jiǎn)單點(diǎn)就是一個(gè)觸發(fā)器和一個(gè)折疊區(qū)
<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo">觸發(fā)器</button> <div id="demo" class="collapse in">折疊區(qū)</div>
<div class="panel-group" id="accordion"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">標(biāo)題一</a></h4> </div> <div id="collapseOne" class="panel-collapse collapse in"> <div class="panel-body">標(biāo)題一對(duì)應(yīng)的內(nèi)容</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">標(biāo)題二</a></h4> </div> <div id="collapseTwo" class="panel-collapse collapse"> <div class="panel-body">標(biāo)題二對(duì)應(yīng)的內(nèi)容</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">標(biāo)題三</a></h4> </div> <div id="collapseThree" class="panel-collapse collapse"> <div class="panel-body">標(biāo)題三對(duì)應(yīng)的內(nèi)容</div> </div> </div> </div>
聲明式觸發(fā)
觸發(fā)手風(fēng)琴可以通過(guò)自定義的 data-toggle 屬性來(lái)觸發(fā)。其中data-toggle值設(shè)置為 collapse,data-target="#折疊區(qū)標(biāo)識(shí)符"。接下來(lái)我們來(lái)看一個(gè)簡(jiǎn)單的示例
第一步:設(shè)計(jì)一個(gè)面板組合,里面有三個(gè)折疊區(qū)
<div class="panel-group" id="myAccordion"> <div class="panel panel-accordion panel-default"></div> <div class="panel panel-accordion panel-default"></div> <div class="panel panel-accordion panel-default"></div> </div>
第二步:給面板添加內(nèi)容,每個(gè)面板包括兩個(gè)部分,第一個(gè)是面板標(biāo)題 panel-heading,并且在這里面添加標(biāo)題 panel-title。第二部分是面板內(nèi)容,也就是折疊區(qū),使用 panel-collapse 樣式
<div class="panel panel-accordion panel-default"> <div class="panel-heading"> <h4 class="panel-title">標(biāo)題一</h4> </div> <div class="panel-collapse"> <div class="panel-body">折疊區(qū)內(nèi)容...</div> </div> </div>
第三步:為了把標(biāo)題和內(nèi)容區(qū)捆綁在一起,可以通過(guò)錨鏈接的方法,把標(biāo)題區(qū)域和面板區(qū)連在一起
<div class="panel-group" id="myAccordion"> <div class="panel panel-accordion panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a href="#panel1">標(biāo)題一</a></h4> </div> <div class="panel-collapse" id="panel1"> <div class="panel-body">折疊區(qū)內(nèi)容...</div> </div> </div> <div class="panel panel-accordion panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a href="#panel2">標(biāo)題二</a></h4> </div> <div class="panel-collapse" id="panel2"> <div class="panel-body">折疊區(qū)內(nèi)容...</div> </div> </div> ...... </div>
第四步:控制面板內(nèi)容區(qū)是否可視。在Bootstrap框架中,如果想讓內(nèi)容區(qū)域不可見,只需要在 panel-collapse 樣式上添加 collapse;如果想讓內(nèi)容區(qū)域默認(rèn)可見,則需要添加樣式collapse和in
<div class="panel panel-accordion panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a href="#panel1">標(biāo)題一</a></h4> </div> <div class="panel-collapse collapse" id="panel1"> <div class="panel-body">折疊區(qū)內(nèi)容...</div> </div> </div>
第五步:激活手風(fēng)琴交互行為。要完成交互行為,需要在標(biāo)題鏈接中自定義兩個(gè)屬性,一個(gè)是data-toggle,并且取值為collapse;另一個(gè)是data-target,取值為各個(gè)面板內(nèi)容區(qū)的標(biāo)識(shí)符,比如說(shuō)ID,在這個(gè)例子分別是#panel1、#panel2和#panel3:
[注意]在這個(gè)案例中不加入data-target="#panel1"也可以,因?yàn)榍懊嬉呀?jīng)有了href="#panel1",但如里是button按鈕作為觸發(fā)器就必須使用data-target="#panel1"語(yǔ)句
<div class="panel panel-accordion panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a href="#panel1" data-toggle="collapse" data-target="#panel1">標(biāo)題一</a></h4> </div> <div class="panel-collapse collapse in" id="panel1"> <div class="panel-body">折疊區(qū)內(nèi)容...</div> </div> </div>
第六步:定義data-parent屬性,實(shí)現(xiàn)點(diǎn)擊一個(gè)其中一個(gè)元素時(shí),關(guān)閉所有的折疊區(qū),再打開所單擊的區(qū)域(如果所單擊區(qū)域是展示的,則會(huì)關(guān)閉)。這個(gè)data-parent取值與手風(fēng)琴面板容器的標(biāo)識(shí)符相匹配,比如這個(gè)例子是指 #myAccordion
<div class="panel-group" id="myAccordion"> <div class="panel panel-accordion panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a href="#panel1" data-toggle="collapse" data-target="#panel1" data-parent="#myAccordion">標(biāo)題一</a> </h4> </div> …
通過(guò)以上6步,可以總結(jié)出以下要點(diǎn)
使用 panel 的 panel-title 作為觸發(fā)元素,使用panel-body的父元素作為折疊區(qū);
使用一個(gè) panel-group 來(lái)包含多個(gè) panel,從而實(shí)現(xiàn)手風(fēng)琴效果;
每個(gè) panel 里的觸發(fā)元素都要指定data-parent屬性,data-parent 屬性的值對(duì)應(yīng) panel-group樣式元素的ID或者其他樣式標(biāo)識(shí)符;
觸發(fā)元素需要指定 data-toggle,并且值為 collapse;
觸發(fā)元素需要指定 data-target屬性, data-target屬性的值對(duì)應(yīng) panel-body 的父元素的ID或者其他樣式標(biāo)識(shí)符;如果是a元素,可以指定href屬性替代
<div class="panel-group" id="accordion"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#panel1">標(biāo)題一</a></h4> </div> <div id="panel1" class="panel-collapse collapse in"> <div class="panel-body">折疊區(qū)內(nèi)容一</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#panel2">標(biāo)題二</a></h4> </div> <div id="panel2" class="panel-collapse collapse"> <div class="panel-body">折疊區(qū)內(nèi)容二</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#panel3">標(biāo)題三</a></h4> </div> <div id="panel3" class="panel-collapse collapse"> <div class="panel-body">折疊區(qū)內(nèi)容三</div> </div> </div> </div>
JS觸發(fā)
【關(guān)鍵字】
$(element).collapse('show');//顯示折疊區(qū)域 $(element).collapse('hide');//隱藏折疊區(qū)域 $(element).collapse('toggle');//反轉(zhuǎn)折疊區(qū)域
<button type="button" class="btn btn-default" id="btn1">顯示折疊區(qū)域</button> <button type="button" class="btn btn-default" id="btn2">隱藏折疊區(qū)域</button> <button type="button" class="btn btn-default" id="btn3">反轉(zhuǎn)折疊區(qū)域</button> <div class="panel-group" id="accordion"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#panel1">標(biāo)題一</a></h4> </div> <div id="panel1" class="panel-collapse collapse in"> <div class="panel-body">折疊區(qū)內(nèi)容一</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#panel2">標(biāo)題二</a></h4> </div> <div id="panel2" class="panel-collapse collapse"> <div class="panel-body">折疊區(qū)內(nèi)容二</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#panel3">標(biāo)題三</a></h4> </div> <div id="panel3" class="panel-collapse collapse"> <div class="panel-body">折疊區(qū)內(nèi)容三</div> </div> </div> </div> <script> $(function(){ $('#btn1').click(function(){ $('.collapse').collapse('show'); }) $('#btn2').click(function(){ $('.collapse').collapse('hide'); }) $('#btn3').click(function(){ $('.collapse').collapse('toggle'); }) }) </script>
【事件】
該插件支持4種類型的事件訂閱
show.bs.collapse show方法調(diào)用之后立即觸發(fā)該事件 shown.bs.collapse 此事件在collapse已經(jīng)顯示出來(lái)(并且同時(shí)在 CSS 過(guò)渡效果完成)之后被觸發(fā) hide.bs.collapse hide方法調(diào)用之后立即觸發(fā)該事件。 hidden.bs.collapse 此事件在collapse被隱藏(并且同時(shí)在 CSS 過(guò)渡效果完成)之后被觸發(fā)
<div class="panel-group" id="accordion"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" data-html="標(biāo)題一" href="#panel1">標(biāo)題一</a></h4> </div> <div id="panel1" class="panel-collapse collapse in"> <div class="panel-body">折疊區(qū)內(nèi)容一</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" data-html="標(biāo)題二" href="#panel2">標(biāo)題二</a></h4> </div> <div id="panel2" class="panel-collapse collapse"> <div class="panel-body">折疊區(qū)內(nèi)容二</div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" data-html="標(biāo)題三" href="#panel3">標(biāo)題三</a></h4> </div> <div id="panel3" class="panel-collapse collapse"> <div class="panel-body">折疊區(qū)內(nèi)容三</div> </div> </div> </div> <script> $(function(){ $("#accordion").on("show.bs.collapse",function(e){ var $element = $(e.target).siblings().first().find('a'); $element.html($element.data('html') + '[折疊區(qū)已打開]'); }).on("hide.bs.collapse",function(e){ var $element = $(e.target).siblings().first().find('a'); $element.html($element.data('html') + '[折疊區(qū)已關(guān)閉]'); }) }); </script>