Cocoon の一覧リストにスクロールアニメーションを適用するカスタマイズ
動作
WordPress テーマ Cocoon の一覧リストに、スクロールに応じたアニメーションを実装するカスタマイズの紹介です。
カスタマイズは 2 ステップの 100% コピペででき、カスタマイズ所要時間は 2 ~ 3 分ほどです。
まずは、完成図をご覧ください。画面内に入ったカードが、ふんわりと表示されます。
執筆時点の Cocoon の一覧リストには、7 種類のカードタイプがあります。どのカードタイプを選んでも、今回のアニメーションを実装できます。
JavaScript を追加
まずは、子テーマの javascript.js にコードを追加します。
ただ、アニメーションの動く回数が異なる 2 つのコードがあります。お好みに合わせてコードを選択します。
何回でもアニメーションが動くコード
一覧リストのカードが画面内に入る度に、アニメーションが動くタイプです。
何回でもアニメーションを動かしたい場合は、下記のコードを子テーマの javascript.js に追加します。
{
const cards = document.querySelectorAll('.entry-card-wrap');
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add('list-animation');
} else {
entry.target.classList.remove('list-animation');
}
});
});
cards.forEach((card) => {
observer.observe(card);
});
}
1 回のみアニメーションが動くコード
一覧リストのカードが最初に画面内に入った時のみ、アニメーションが動くタイプです。1 度アニメーションが動いたカードは、再び画面内に入ってもアニメーションが動きません。
何回もアニメーションが動くのは避けたい場合は、下記のコードを子テーマの javascript.js に追加します。
{
const cards = document.querySelectorAll('.entry-card-wrap');
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add('list-animation');
observer.unobserve(entry.target);
}
});
});
cards.forEach((card) => {
observer.observe(card);
});
}
CSS を追加
最後に CSS を指定すれば終わりです。
子テーマの style.css に CSS を追加します。
.list {
overflow: hidden;
}
.list-animation {
animation: list-animation 1.2s cubic-bezier(0.4, 0, 0.2, 1);
}
@keyframes list-animation {
from {
opacity: 0;
transform: scale(1.1) translateY(24px);
}
32% {
opacity: 0;
transform: scale(1.1) translateY(24px);
}
}
これで完成です。
おわりに
さらにカスタマイズをすれば、関連記事や投稿記事内の画像などにも今回のアニメーションを適用できます。
また、CSS の @keyframes
の変更で、お好みのアニメーションを表現できます。
今回の Intersection observer によるアニメーションの詳細は、Intersection observer によるスクロールアニメーションで説明しています。