[WordPress] でAOS.js スクロールアニメーション(プラグインなし)
今までスクロールアニメーションにwow.jsを使用していましたが、公開から年月が経っているのでAOS.jsに入れ替える事にしました。WordPressのブロックエディタで使用するにはプラグインが手軽で良いのですが、使わない方向で頑張ってみました。(2026/7月 バグを修正)
なぜwowではダメなのか?
PageSpeed Insightsで提案されました。
「ポリフィルと変換を使用すると、従来のブラウザで新しい JavaScript 機能を使用できるようになります。ただし、その機能の多くは最新ブラウザでは必要ありません。バンドルされた JavaScript の場合、モジュールあり / モジュールなしの機能検出を使用する最新スクリプトの導入戦略を採用することにより、従来のブラウザに対するサポートを維持しながら、最新ブラウザに送るコード量を減らすことができます。」
wow.jsを指している事が分かりました。
また、wowと一緒に使用していたAnimistaは、「合成されていないアニメーションは使用しないでください」と言われました。潮時なのかも。

AOS.jsを設定
htmlに追記して使用します。
<div data-aos="fade-up">・・・</div>
<p data-aos="fade-up" data-aos-delay="500" data-aos-duration="1000">・・・</p>ブロックエディターでは記載できませんがプラグインで編集可能です。
ブロックエディターで簡単設定
プラグイン無で、使用したいので、「高度な設定」→「追加CSSクラス」に記入出来る様しました。
準備
if ( is_front_page() ) を使い、TOPページだけ、アニメーションを付けました。
function.phpにcdnへリンク
function add_files() {
if ( is_front_page() ) {
wp_enqueue_style('aos-style', 'https://cdn.jsdelivr.net/npm/aos@2.3.4/dist/aos.css');
wp_enqueue_script('aos-script', 'https://cdn.jsdelivr.net/npm/aos@2.3.4/dist/aos.js', array(), null, true);
}
}
add_action('wp_enqueue_scripts', 'add_files');aos-fade delay-300 duration-800 を書いた場合、変換される様にします。
- “aos-” で始まるクラスを、data-aosに変換
- “delay-” で始まるクラスを、data-aos-delayに変換
- “duration-” で始まるクラスを、data-aos-durationに変換
function init_aos_footer_script() {
echo '
<script>
(function() {
document.addEventListener("DOMContentLoaded", function () {
document.documentElement.classList.replace("no-js", "js");
document.querySelectorAll("[class*=\"aos-\"], [class*=\"delay-\"], [class*=\"duration-\"]").forEach(function (el) {
el.classList.forEach(function (cls) {
if (cls.startsWith("aos-") && !el.hasAttribute("data-aos")) {
el.setAttribute("data-aos", cls.substring(4));
} else if (cls.startsWith("delay-") && !el.hasAttribute("data-aos-delay")) {
el.setAttribute("data-aos-delay", cls.substring(6));
} else if (cls.startsWith("duration-") && !el.hasAttribute("data-aos-duration")) {
el.setAttribute("data-aos-duration", cls.substring(9));
} else if (cls.startsWith("anchor-") && !el.hasAttribute("data-aos-anchor-placement")) {
el.setAttribute("data-aos-anchor-placement", cls.substring(7));
} else if (cls.startsWith("ease-") && !el.hasAttribute("data-aos-easing")) {
el.setAttribute("data-aos-easing", cls);
}
});
});
// ページ全体の画像なども読み込み終わったらAOSを初期化(カクつき・ズレ防止)
window.addEventListener("load", function() {
if (typeof AOS !== "undefined") {
AOS.init({
once: true,
offset: 80,
duration: 800,
easing: "ease-out",
mirror: false,
anchorPlacement: "top-bottom",
});
}
// CLS防止フラグを解除(これでフワッと表示)
document.documentElement.classList.add("aos-ready");
});
});
})();
</script>
';
}
add_action('wp_footer', 'init_aos_footer_script', 20);
// フラッシュ防止用の最小限のCSS
function add_aos_critical_css() {
echo '<style>html:not(.aos-ready) [data-aos], html:not(.aos-ready) [class*="aos-"] { opacity: 0 !important; visibility: hidden !important; }</style>';
}
add_action('wp_head', 'add_aos_critical_css', 1);CSS
4種類の動作に絞っています。
- fade-up
- fade-down
- fade-right
- fade-left
[data-aos],
.aos-fade-up,
.aos-fade-down,
.aos-fade-right,
.aos-fade-left,
[class*="delay-"],
[class*="duration-"] {
will-change: transform, opacity;
backface-visibility: hidden;
transition-property: transform, opacity, visibility !important;
transition-duration: 0.8s !important; /* 基本の速度 */
transition-timing-function: ease-out !important;
}
/* AOSが発火した時の表示設定(元の位置に滑らかに戻す) */
[data-aos].aos-animate,
.aos-fade-up.aos-animate,
.aos-fade-down.aos-animate,
.aos-fade-right.aos-animate,
.aos-fade-left.aos-animate,
[class*="delay-"].aos-animate,
[class*="duration-"].aos-animate {
opacity: 1 !important;
visibility: visible !important;
transform: translate(0, 0) !important;
}
/* ==========================================
fade系4種限定:読み込み完了前の「初期位置」
========================================== */
html:not(.aos-ready) [data-aos="fade-up"],
html:not(.aos-ready) .aos-fade-up { transform: translateY(15px); }
html:not(.aos-ready) [data-aos="fade-down"],
html:not(.aos-ready) .aos-fade-down { transform: translateY(-15px); }
html:not(.aos-ready) [data-aos="fade-right"],
html:not(.aos-ready) .aos-fade-right { transform: translateX(-40px); }
html:not(.aos-ready) [data-aos="fade-left"],
html:not(.aos-ready) .aos-fade-left { transform: translateX(40px); }
/* その他微調整 */
.wp-block-image[data-aos] img,
.wp-block-image[class^="aos-fade-"] img,
.ark-block-section__img {
display: block;
}
/* モバイル最適化(スマホのときは少し早めに動かす) */
@media (max-width: 768px) {
[data-aos],
.aos-fade-up,
.aos-fade-down,
.aos-fade-right,
.aos-fade-left,
[class*="delay-"],
[class*="duration-"] {
transition-duration: 0.6s !important;
}
}使い方
「高度な設定」→「追加CSSクラス」に追記。数字は大きい程ゆっくりになります。300は0.3秒
aos-fade-up delay-300 duration-800今のところ問題なさそうです。間違えていたらごめんなさい。自己責任でお使い下さい。プラグインもあるので、いろいろやりたい方はそちらが便利です。




コメント ※ハンドルネームでお願いします