アコーディオン機能とは
+ボタンを押したらアコーディオンが開いてテキストを表示させ、ーボタンを押したらアコーディオンが閉じる。主に質問コーナーなどに多い。
アコーディオンの流れ
①答えの部分はCSSで非表示にします。
②3つの質問部分には同一のclass名を付与し、
③それらのclickイベントを作ります。
質問をクリックした時に、対応する答えを隠すのか表示するのかを判断するため、下図のようにopenというclassを用います。
答えの表示中はopenをつけ、非表示中は外します。
hasClassメソッド
引数に指定したクラスを、オブジェクトが持っているか判定するときに使用します。
オブジェクトがそのクラスを持っていればtrue、持っていなければfalseを返します。
答えの表示・非表示は以下のようにif文を用いて行います。
質問をクリックした時に、$('.answer')がすでにopenクラスを持っていれば、(質問の答えが現在表示されていると判断できるので)openクラスを外し、答えを隠します。
openクラスがない場合はその逆です。
slideUp・slideDownメソッド
答えが表示されている時は非表示にするためにslideUpメソッドを用いて隠し、
質問の右にある「-」記号は「+」記号に書き換えます。
答えを表示させるときは、slideDownメソッドで表示し、「+」記号は「-」に書き換えましょう。
htnlファイル
<ul id="faq-list">
<li class="faq-list-item">
<h3 class="question">Progateの公式キャラクターはなんですか?</h3>
<span>+</span>
<div class="answer">
<p>にんじゃわんこといいます。忍者の格好をしたわんこです。ネコではありません。</p>
</div>
</li>
<li class="faq-list-item">
<h3 class="question">にんじゃわんこはオスですか?それともメスですか?</h3>
<span>+</span>
<div class="answer">
<p>にんじゃわんこはオスです。</p>
</div>
</li>
CSSファイル
.faq-list-item {
margin:10px;
border-bottom:1px solid #ccc;
position:relative;
cursor:pointer;
text-align: left;
}
.faq-list-item h3 {
font-size: 14px;
}
.faq-list-item span {
position:absolute;
top:0;
right:5px;
color:#ccc;
font-size:13px;
}
.answer {
font-size: 12px;
padding: 5px 0px;
margin-bottom: 15px;
/* displayプロパティをnoneにしてください */
display: none;
}
JSファイル
// FAQのアコーディオン
$('.faq-list-item').click(function() {
var $answer = $(this).find('.answer');
if($answer.hasClass('open')) {
$answer.removeClass('open');
$answer.slideUp();
$(this).find('span').text("+");
} else {
$answer.addClass('open');
$answer.slideDown();
$(this).find('span').text(“-“);
}
});
});