以前にdetailsタグの使い方やアコーディオンとして使用した際のメリットについて記事にしましたが、今回は開閉時にJavaScriptで何らかの処理を追加する方法を試してみます。
サンプルコード
以前と同じようにdetailsタグを使ったアコーディオンを実装します。
<details class="accordion" open>
<summary class="accordion-header">リゼ・ヘルエスタ</summary>
<div class="accordion-panel">
<p>ヘルエスタ王国の第二皇女。<br>
文武両道学園主席、真面目で誰にでも優しくかなりの人望がある。<br>
王位継承の資格者として日々鍛錬や人とのコミュニケーションを大事にしている。</p>
<p>ファンアート:<a href="https://twitter.com/hashtag/%E3%83%98%E3%83%AB%E7%B5%B5%E3%82%B9%E3%82%BF">#ヘル絵スタ</a></p>
</div>
</details>
~ 略 ~
details要素の開閉時のイベントはtoggleで取得できます。
例として、開閉時にconsoleを表示するようにしてみます。
const details = document.querySelectorAll('.accordion');
details.forEach((d) => {
d.addEventListener('toggle', (e) => {
const t = e.currentTarget;
if(d.open) {
console.log(t, '開いた時の処理');
} else {
console.log(t, '閉じた時の処理');
}
});
});
注意点として、open属性を付与して最初に開いた状態にした場合、ページにアクセスした時点でtoggleイベントが発火するようです。
details要素の開閉イベントを取得するデモページ
コメントが承認されるまで時間がかかります。