【swellカスタマイズ】javascript/cssだけで変な動きのあるページを作る

javascriptとcssだけで動きます
やろうと思えばどの部分にもCSSで手軽に装飾できるのが楽しいSWELL

エフェクトが効く部分はゆっくりとスクロールするとエフェクトが見えませんので
その場合はスクロールバックすると再度エフェクトの確認ができます。
ほぼ全てのブロックと単独行に自在に適用可能






なんでもできるぜ
preタグでコード表示の部分
@font-face {
font-family: 'icomoon';
src:url('/wp-content/themes/swell/assets/fonts/icomoon.ttf?7ojy2d') format('embedded-truetype'),
url('/wp-content/themes/swell/assets/fonts/icomoon.ttf') format('truetype'),
url('/wp-content/themes/swell/assets/fonts/icomoon.woff') format('woff'),
url('/wp-content/themes/swell/assets/fonts/icomoon.svg') format('svg');
font-weight: normal;
font-style: normal;
font-display: swap;
}
画像ギャラリーの一枚一枚にも個別で






















つくりは簡単です。
こんな感じ


slideview と **-MOVEまたは border* の各classを組み合わせて宣言します。
宣言する順番はどちらが先でも構いません。必ずセットで宣言を。
**-MOVE と border は 併用可能。
**-MOVEは複数記述しても1番最後のみ有効
使用するCSS
外観>テーマファイルエディターでも カスタマイズ>追加CSSでも好きな方にコピペしてください。
//MOVE FADE .slideview { opacity: 0; } .LL-MOVE { opacity: 0; } .RR-MOVE { opacity: 0; } .UU-MOVE { opacity: 0; } .DD-MOVE { opacity: 0; } .MFADE{ opacity: 0; } .FLAT-MOVE{ transform-origin:center bottom; transform: rotateX(-90deg) } .FLAT-MOVE.on{ transform-origin:center bottom; -webkit-transition:all 3s ease-in-out; -moz-transition:all 3s ease-in-out; -o-transition:all 3s ease-in-out; -ms-transition:all 3s ease-in-out; transition:all 3s ease-in-out; -webkit-transform:rotateX(0deg); -moz-transform:rotateX(0deg); -o-transform:rotateX(0deg); -ms-transform:rotateX(0deg); transform:rotateX(0deg); } .FLAT-TOP-MOVE{ transform-origin:center top; transform: rotateX(-90deg) } .FLAT-TOP-MOVE.on{ transform-origin:center top; -webkit-transition:all 3s ease-in-out; -moz-transition:all 3s ease-in-out; -o-transition:all 3s ease-in-out; -ms-transition:all 3s ease-in-out; transition:all 3s ease-in-out; -webkit-transform:rotateX(0deg); -moz-transform:rotateX(0deg); -o-transform:rotateX(0deg); -ms-transform:rotateX(0deg); transform:rotateX(0deg); } .FF-MOVE{ opacity: 0; } .FF-MOVE.on{ opacity: 1; -webkit-transition:all 1s ease-in-out; -moz-transition:all 1s ease-in-out; -o-transition:all 1s ease-in-out; -ms-transition:all 1s ease-in-out; transition:all 1s ease-in-out; -webkit-transform:rotate(360deg); -moz-transform:rotate(360deg); -o-transform:rotate(360deg); -ms-transform:rotate(360deg); transform:rotate(360deg); } .RR-MOVE.on { animation: slideInR forwards 2s; } .LL-MOVE.on { animation: slideInL forwards 2s; } .UU-MOVE.on { animation: slideInU forwards 2s; } .DD-MOVE.on { animation: slideInD forwards 2s; } .MFADE.on { animation: fade forwards 4s; } .ofade { animation: fade forwards 1s; } @keyframes fade{ 0%{ opacity: 0; } 100%{ opacity: 1; } } .tsL { animation: slideInL forwards 0.5s; } @keyframes slideInL { 0% { opacity: 0; transform: translateX(-140px); } 100% { opacity: 1; transform: translateX(0); } } .tsR { animation: slideInR forwards 0.5s; } .tsRR { animation: slideInR forwards 2s; } @keyframes slideInR { 0% { opacity: 0; transform: translateX(140px); } 100% { opacity: 1; transform: translateX(0); } } .tsU { animation: slideInU forwards 0.5s; } @keyframes slideInU { 0% { opacity: 0; transform: translateY(-140px); } 100% { opacity: 1; transform: translateY(0); } } .tsD { animation: slideInD forwards 0.5s; } @keyframes slideInD { 0% { opacity: 0; transform: translateY(140px); } 100% { opacity: 1; transform: translateY(0); } } .INBK{display: inline-block;} .border{ position: relative; } .borderl{ position: relative; } .borderl.on:before{ content: ''; position: absolute; left: 0; bottom: 0; width: 0; border-bottom: solid 2px #0f6aaa; animation: border_anim 2s linear forwards; } .border.on:before{ content: ''; position: absolute; left: 50%; bottom: 0; width: 0; border-bottom: solid 2px #0f6aaa; transform: translateX(-50%); animation: border_anim 2s linear forwards; } @keyframes border_anim { 0%{ width: 0%; } 100%{ width: 100%; } }
各クラスの定義詳細
アニメーションエフェクトを定義しています。以下に各クラスの機能を説明します:
- slideview、LL-MOVE、RR-MOVE、UU-MOVE、DD-MOVE、MFADE、FF-MOVE: これらのクラスは初期状態では透明度が0(つまり完全に透明)と定義されています。つまり、これらのクラスが適用された要素は初期状態では見えません。
- FLAT-MOVEとFLAT-TOP-MOVE: これらのクラスは3D回転アニメーションを定義しています。初期状態では要素は-90度回転しています。”on”クラスが追加されると、要素は0度(元の位置)に回転します。これにより要素がフラットから立ち上がるように見えます。
- FF-MOVE: このクラスはフェードインと回転アニメーションを定義します。”on”クラスが追加されると、要素は完全に見えるようになり、360度回転します。
- RR-MOVE.on、LL-MOVE.on、UU-MOVE.on、DD-MOVE.on: これらのクラスはスライドインアニメーションを定義します。”on”クラスが追加されると、要素は指定された方向からスライドインします。
- MFADE.on、ofade: これらのクラスはフェードインアニメーションを定義します。”on”クラスが追加されると、要素は完全に見えるようになります。
- tsL、tsR、tsU、tsD: これらのクラスはスライドインアニメーションを定義します。要素は指定された方向からスライドインします。
- INBK: このクラスは要素をインラインブロックとして表示します。
- borderとborderl: これらのクラスは境界線アニメーションを定義します。”on”クラスが追加されると、要素の下部に境界線が表示され、左から右へと又は中央から左右に広がります。
使用するjavascript
カスタマイズ>高度な設定>bodyタグ終了直前に出力するコード にそのまま貼り付けてください。


SWELLのjavascript記述はページごとに読み込ませる方法と
カスタマイズ>高度な設定で全体的に読み込ませる
方法と2種類あります。
カスタマイズ>高度な設定で全体的に読み込ませる場合は
以下のソースをそのままコピペでOKですが
ページ毎に読み込ませる(ページ下部のJS記入する部分)場合の注意
ページごとの記載はデフォルトは 先頭と最下部のscriptタグが自動で付加されますので
それを削ったものをコピペしてください。
めんどくさい方はそのままコピペしても良いのですが
その際は必ずその下部にあるチェックマークをお忘れなく。


このCSSとjavascriptのBLOGへの実装方法の考え方



cssの場合は
外観>テーマファイルエディター | 恒久的に使うならこっちに記載 |
またはカスタマイズ>追加CSS | 恒久的に使うならこっち記載その2 |
個別ページの下部のCSS記載欄 | 一時的にテストもしくはそのページだけしか使わないならこっち |



javascriptの場合は
カスタマイズ>高度な設定 | 恒久的に使うならこっち記載 |
個別ページの下部のJS記載欄 | 一時的にテストもしくはそのページだけしか使わないならこっち |
いずれにコピペしても正常に動作することを確認してます。
<script> let svRect = []; let svTop = []; let winY = window.pageYOffset; let winH = window.innerHeight; const adj = 100; const sview = document.querySelectorAll('.slideview'); window.addEventListener('resize', function() { winH = window.innerHeight; }); function updateView() { svRect = []; svTop = []; for (let i = 0; i < sview.length; i++) { svRect.push(sview[i].getBoundingClientRect()); svTop.push(svRect[i].top + winY); } } function updateClass() { for (let i = 0; i < sview.length; i++) { if (winY > svTop[i] - winH + adj) { sview[i].classList.add('on'); } else { sview[i].classList.remove('on'); } } } window.addEventListener('scroll', function() { winY = window.pageYOffset; updateClass(); }); updateView(); </script>
テクニカルに説明
このJavaScriptのコードはスクロールアニメーション効果に使われています。クラス名.slideview
がついた要素に適用されます。
以下に詳細な説明をします;)
svRect
とsvTop
は配列で、それぞれ.slideview
要素のバウンディングボックス(要素の位置やサイズ情報)と要素の上辺の位置を格納します。winY
は現在のドキュメントの垂直方向のスクロール量(ピクセル単位)を格納します。最初はwindow.pageYOffset
に設定されています。winH
はウィンドウ(ビューポート)の高さ(ピクセル単位)を格納します。最初はwindow.innerHeight
に設定されています。adj
は調整用の数値で、スクロール位置が.slideview
要素のどの部分に達したらアニメーションを開始するかを決定します。sview
はページ上の全ての.slideview
要素を格納したNodeListです。- ページがリサイズされるときに発火するイベントリスナーが設定されています。これはウィンドウの高さ
winH
を更新するためです。 updateView
関数はページ上の全ての.slideview
要素のバウンディングボックスと上辺の位置を更新します。updateClass
関数はスクロール位置に応じて.slideview
要素にon
クラスを追加または削除します。スクロール位置が要素の上辺より下で、かつ要素の下辺より上にある場合(つまり要素がビューポート内に入ったとき)、on
クラスが追加されます。それ以外の場合はon
クラスが削除されます。- スクロールするたびに発火するイベントリスナーが設定されています。これはスクロール位置
winY
を更新し、updateClass
関数を呼び出すためです。 - 最後に、ページのロード時に
updateView
関数が呼び出されます。
このコードを使うと、ユーザーがスクロールして.slideview
要素がビューポートに入るたびに、その要素にon
クラスが追加されます。これによりCSSアニメーションを発動することができます(例えば、.slideview.on
に対して特定のアニメーションを設定するなど)。
動作の意味としては目的の領域に画面が達したらadj分オフセットした位置にからエフェクト発動
指定のclassにon を追加してそのエフェクト仕込んだclassを発動させる的な動作してます。
教科書に載っているようなclassに名称追加して新しいclassを参照できるようにしようってやつです。
領域から外れると(バックスクロールなど)onを削除するのでまた元classで初期化されて
再度領域に達すると同じように繰り返しエフェクトが可能。
意味わからなくてもコピペして使えると思います。
このjavascriptとcssの定義を応用すればスクロールアクションに対する任意のCSS発火が
色々とできると思います。

