Webアニメーション・発展

クリックで動きを始める(JSとの組み合わせ)

transitionや@keyframesは「クラスが付いた瞬間」にも発動できます。JSでクラスを付け外しして、クリックのタイミングで動きを始める方法です。

:hoverはマウスが乗るだけの反応でした。「クリックしたときだけ動かしたい」「もう一度押すと元に戻したい」——そんなときはJavaScriptの出番です。JSトラックで学んだaddEventListenerclassListを、CSSアニメーションと組み合わせます。

いいねボタンを作る

ボタンを押すたびに、ハートが弾む・消えるを切り替えます。

しくみを分解する

CSS側は、.is-activeが付いたときだけ弾む動きをする、と決めているだけです。

<button class="like">🤍</button>
.like.is-active {
  animation: pop 0.35s ease;
}

JS側は、クリックのたびに.is-activeを付けたり外したりしています。

<button class="like">🤍</button>
const btn = document.querySelector('.like');
btn.addEventListener('click', () => {
  const active = btn.classList.toggle('is-active');
  btn.textContent = active ? '❤️' : '🤍';
});

classList.toggle('is-active')は、そのクラスが無ければ付ける、あれば外すという便利メソッド。しかも「付けた後どうなったか(true/false)」を返してくれるので、上の例ではそれを使って絵文字も一緒に切り替えています。

もう1つ:開閉するメニュー

同じ考え方で、メニューの開閉も作れます。

高さを0から200pxのように具体的な値の間でtransitionすると、なめらかに開閉できます(height: autotransitionできないので、あらかじめ十分なmax-heightを用意するのがコツです)。

このレッスンのまとめ

  1. CSSで「クラスが付いたらこう動く」を用意し、JSはクラスの付け外しだけを担当する
  2. classList.toggle('クラス名')で、クラスをON/OFFできる(結果はtrue/falseで返る)
  3. 見た目のルールはCSS、タイミングの制御はJS、と役割を分ける
  4. 開閉アニメーションはmax-heighttransitionさせると作れる

これで「クラスの付け外しで動きを制御する」形が手に入りました。次回はこの形をそのまま使って、きっかけをクリックからスクロールに変えてみます。