【jQuery不要】javascriptで作るアコーディオン

jQuery無しで動くアコーディオンを作りました。
スライドする動きはどうにも表現が難しかったのでアニメーションライブラリのGSAPで動きをつけました。

GSAP – GreenSock
https://greensock.com/gsap/

See the Pen 200822_アコーディオン by nekuta (@nekuta) on CodePen.

イベントリスナー登録

forで1つずつイベントをつける時は、var = i とするところを let = i とかにすると、ブロックスコープになるので全ての要素にイベントがつきます。

let accordionOpen = document.getElementsByClassName('accordion-open');
for (let i = 0; i < accordionOpen.length; i++) {
//accordion-openの数だけイベントをつけます
  accordionOpen[i].addEventListener('click', function (e) {
    //クリックした時に発火
    accordionAction(e);
  }, false);
}

アニメーション

//openする時
thisAccordion.classList.add('is-open');
TweenMax.to(target, 0.6, {
  height: targetHeight + 'px',
  opacity: 1,
  ease: Power1.easeOut,
  //上の処理が終わったらaccordionFlgをtrueにする
  onComplete: function () {
  accordionFlg = true;
 },
});




//closeする時
var timeLine = new TimelineMax();//タイムラインを作成
timeLine.to(target, 0.15, {
  opacity: 0,
  ease: Power1.easeOut,
}).to(target, 0.5, {
  height: 0,
  ease: Power1.easeOut,
})
timeLine.eventCallback('onComplete', end);
//timeLineの処理が終わったら関数endを呼び出す

function end() {
  accordionFlg = true;
  thisAccordion.classList.remove('is-open');
}

参考サイト

TweenMaxを使ってみる | なんかいろいろデザインする人
https://reiwinn-web.net/2017/06/07/tweenmax/

使用ライブラリ

GSAP – GreenSock
https://greensock.com/gsap/