2.5_Toggle事件與特效應用
運用<dt>和<dd>來產生垂直排列的的Q&A結構的清單,透過toggle()事件來顯示與隱藏答案的欄位,達成accordion特效的效果。

運用<dt>和<dd>來產生垂直排列的的Q&A結構的清單,透過toggle()事件來顯示與隱藏答案的欄位,達成accordion特效的效果。


介紹要完成的範例(直式的accordion,運用toggle概念)

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.00.35.50.jpg

組成Q&A的清單,並設定css樣式

//運用<dt><dd>來達成清單式的QA結構

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.01.15.04.jpg

新增style.css,準備寫入樣式

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.01.26.71.jpg

進入console的檢視源始碼模式,寫入樣式 dt{color:red;}
//因為作者有裝google chrome外掛-autosave,可直接在瀏覽器上修改css後,直接和本機的css檔案同步

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.01.43.71.jpg

檔案style.css
可看到剛才流瀏器上修改的樣式,已經被成功寫入本機檔案了

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.01.48.92.jpg

設定<dd>的邊距樣式

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.02.10.71.jpg

設定<dt>的文字樣式、背景等樣式

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.02.35.71.jpg

<body>設寬度和置中

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.02.53.96.jpg

設定<dt>的下邊線的樣式

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.03.03.71.jpg

設定<dt>的上邊線的樣式

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.03.17.62.jpg

隱藏<dd>,及<dt>最上及最下層的邊線

隱藏所有的<dd>

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.04.41.04.jpg

連行結果,可看到所有的<dd>都隱藏了,只剩下<dt>

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.04.42.75.jpg

想將第一個<dt>的上邊線和最後一個<dt>的下邊線隱藏

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.05.22.71.jpg

運行結果,可看到第一個的邊線消失了,但是最後一個的沒有成功消失

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.05.25.46.jpg

解說last-child的概念(指定的是其parent的最下一層,所以會變成下一個<dd>隱藏)
所以需改寫成以下寫法
dt:nth-last-child(2){border-bottom:none;}

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.06.42.46.jpg

運行結果,可看到最下層的邊線消失了

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.06.53.54.jpg

打開chrome development tool,可看到目前<dd>隱藏的方式是<dd style="display:none">

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.06.58.71.jpg

如果想用class的樣式來設定隱藏的話=>style.css寫入
.hide{dispaly:none}

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.07.13.29.jpg

檔案index.html
將dd.hide()改成dd.addclass('hide');

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.07.18.79.jpg

運行結果,在chrome developer tool中,可看到<dd>的隱藏方式,被設定為class的方式了
<dd class="hide">

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.07.23.71.jpg

運用filter來過濾節點,除了第一個<dd>外,其它都隱藏

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.08.23.71.jpg

運行結果,除了第一個<dd>外,其它都隱藏

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.08.25.71.jpg

運用next()、show()、siblings()、hide()來實現滑動特效

滑過任意<dt>,出現相對應的<dd>

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.09.59.58.jpg

運行結果,成功運行

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.10.05.12.jpg

同層的<dd>通通都隱藏

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.10.37.46.jpg

運行結果,只有目標<dd>會出現,其它同層的通通隱藏

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.10.40.96.jpg

將原先有使用$(this).next的code整理為階層式的寫法

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.11.12.71.jpg

運行結果,修改後寫法後,功能一樣正確

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.11.16.12.jpg

將原先的hide()改為滑出特效slideUp()

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.11.25.08.jpg

運行結果,slideUp的滑出特效的效果

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.11.29.92.jpg

改變滑出特效的時間為2秒-slideUp(2000)

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.11.35.25.jpg

運行結果,緩慢滑出特效的效果

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.11.40.25.jpg

運用on()來指定觸動滑動事件的範圍

//觸發<dl>之下的<dt>,具階層群組觸發的敦果,好處是不用在逐一指定<dt>來觸發事件

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.14.12.71.jpg

運行結果,功能正確執行

/images/coding-note/javascript/jQuery-30day/05.Events-201/05.Events-201-0.14.38.83.jpg