こんにちは。すずきです。
- 縦スクロールに合わせて要素を横に動かしたい
- 横の動きも入れて立体的なパララックスを入れたい
このようなお悩みに答えます。
縦スクロールのサイトで、スクロールに応じて要素を横に動かしたい時がありますよね。
自分もコーディングをしていてこのような課題に直面しました。
調べてみた限りではプラグインで対応できなかったので、jQueryのコードを生成し解決しました。
この記事を読むことで、縦スクロールに応じて要素を横に動かす動きを簡単に実装できるようになります。
著者のプロフィール
- 独学でフリーランスwebデザイナー
- フリーランス2年目
- 現役で案件に取り組んでいます
日々コーディングしながら、新しい技術を勉強中です。
結論のコード
まずは結論のコードをお見せします。CSS
は色付けで書いている程度で、HTML
とjQuery
だけで実装できます。
See the Pen 縦スクロールに応じて要素を横に動かす by すずき (@k-suzuki3533) on CodePen.
jQuery
を使用しているので、実装の際はCDN等を読み込むようにしてください。
各コードの解説
HTML
HTML
は以下のコードを使用しています。
<div class="container">
<div class="parallax-x -left"></div>
<div class="parallax-x -right"></div>
<div class="parallax-x -left"></div>
<div class="parallax-x -right"></div>
<div class="parallax-x -left"></div>
<div class="parallax-x -right"></div>
</div>
横方向に動かしたい要素にparallax-x
のclassを付与しています。
さらに、左方向に動かしたい要素には-left
、右方向に動かしたい要素には-right
のclassを追加で付与しています。
jQuery
jQuery
で記述するコードは以下のとおりです。
// ウィンドウがスクロールされたときのイベントを設定します
$(window).on("scroll", function () {
// 現在のスクロール位置を取得します
const scrollPosition = $(window).scrollTop();
// ドキュメントの最大のスクロール可能な位置を計算します
const maxScroll = $(document).height() - $(window).height();
// スクロールの進捗をパーセンテージとして計算します
const scrollPercentage = scrollPosition / maxScroll;
// ".parallax-x.-left" クラスを持つ各要素に対して処理を行います
$(".parallax-x.-left").each(function () {
// 横方向の移動速度を設定します
const speed = 5;
// 移動する距離を計算します
const translateXValue = scrollPercentage * ($(this).width() * speed);
// 要素を左方向に移動させるスタイルを適用します
$(this).css("transform", `translateX(-${translateXValue}px)`);
});
// ".parallax-x.-right" クラスを持つ各要素に対して処理を行います
$(".parallax-x.-right").each(function () {
// 横方向の移動速度を設定します
const speed = 5;
// 移動する距離を計算します
const translateXValue = scrollPercentage * ($(this).width() * speed);
// 要素を右方向に移動させるスタイルを適用します
$(this).css("transform", `translateX(${translateXValue}px)`);
});
});
右方向、左方向それぞれ動かすコードを書いているのでちょっと長くなっています。
片方だけで良い場合は適宜削除してください。
また、コメントアウトで各コードがどのような動きをしているか解説しています。
不要な場合はこちらも適宜削除してください。
パララックスを実装できるプラグイン
今回は横方向の動きについて解説しましたが、縦方向に動かしたい時もあるかと思います。
縦方向に関してはプラグインを使った方が簡単に実装できます。
rellaxというプラグインがおすすめです。
画像にしか実装できないプラグインもある中、こちらのプラグインは<div>
など、どんな要素にもパララックスを付与することができます。
また、ブレイクポイント毎に動きを指定できるので、スマホ対応なども簡単に実装できます。
詳しい実装方法などは下記記事にて解説しています。
おわりに
縦スクロールに応じて要素を横に動かす方法を解説しました。
jQueryを使用することで簡単に実装することができますよね。
やはりサイトに動きが加わるとクライアントにも喜ばれます。
またサイトの雰囲気と合わせて実装することで、魅力的なサイトに魅せることができるようになります。