BLOG

ブログ
  • Web制作

Rellax.jsとLenis.jsを使ってパララックスと慣性スクロールを実装する方法

Rellax.jsとLenis.jsを使ってパララックスと慣性スクロールを実装する方法

はじめに

Webサイトに奥行きや動きを与える手法として、パララックス効果と慣性スクロールは非常に人気があります。

この記事では、軽量で扱いやすいライブラリ Rellax.js と、滑らかなスクロール体験を提供する Lenis.js を組み合わせて、奥行きを感じるスクロール演出を実装する方法を丁寧に解説します。

使用ライブラリの概要

Rellax.jsとは?

Rellax.js は、パララックスの代表的なライブラリで、スクロールに応じて要素の動きを制御します。指定したスピードで要素がスクロールとともに移動し、奥行きのある演出が可能です。

Lenisとは?

Lenis は、慣性スクロールを実現するJavaScriptライブラリです。
スマートフォンやタブレットでも高いパフォーマンスを発揮し、自然なスクロール体験を提供します。

実装方法

必要なライブラリを読み込む

<!-- Lenis -->
<script src="https://cdn.jsdelivr.net/gh/studio-freight/lenis@1.0.19/bundled/lenis.min.js"></script>

<!-- Rellax -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/rellax/1.12.1/rellax.min.js"></script>

HTMLの準備

<body>
	<div class="img-1">
		<img src="sample-img-1.jpg" class="rellax" />
	</div>
	<div class="img-2">
		<img src="sample-img-2.jpg" class="rellax" />
	</div>
	<div class="img-3">
		<img src="sample-img-3.jpg" class="rellax" />
	</div>
</body>

要素に .rellax クラスを指定します。

JavaScriptで初期化する

// Lenis を初期化
const lenis = new Lenis();

function raf(time) {
    lenis.raf(time);
    requestAnimationFrame(raf);
}
requestAnimationFrame(raf);

// Rellax を初期化
const rellax = new Rellax(".rellax");

Rellax.jsで使用できるオプション

HTML属性で使えるカスタムデータ属性

要素ごとに個別設定できます。

<div class="rellax" data-rellax-speed="-3" data-rellax-zindex="2" data-rellax-percentage="0.5">SAMPLE</div>
属性名説明
data-rellax-speedスクロール速度(例:-2, 1.5, 0など)。
data-rellax-percentagecenter: true の時に、表示エリアのどの位置を基準に動かすか(例:0.5 = 中央)。
data-rellax-zindexCSSのz-indexの設定。
data-rellax-horizontalこの要素だけ横方向の動きを有効/無効に(例:true, false)。
data-rellax-verticalこの要素だけ縦方向の動きを有効/無効に。

初期化するときに一括指定するオプション

const rellax = new Rellax('.rellax', {
  speed: -2,
  center: false,
  wrapper: null,
  round: true,
  vertical: true,
  horizontal: false,
});
オプション名説明
speednumberデフォルトのスクロール速度(data-rellax-speedがない要素に適用)。
centerbooleantrueにすると、スクロール位置が要素の中心になるように調整される。
wrapperstring or Elementスクロール元のラッパー要素。指定しない場合はwindow
roundbooleantrueでパフォーマンス向上のために位置を整数に丸める。
verticalboolean縦方向にパララックス効果をつける。
horizontalboolean横方向にパララックス効果をつける。

パララックス要素がうまく表示されない時は

Rellax.jsを使ってパララックスを実装すると、ページの下の方に配置したパララックス要素がうまく表示されないなどの問題が発生する場合があります。

この問題の原因は、Rellax.jsではbody要素を基準にパララックス効果が開始されるため、パララックスさせたい要素がまだ画面上に現れていないうちから動き始めてしまいます。

そのため、長いページの下の方にパララックス要素を配置した場合、そこに辿り着くまでに要素の位置がずれてしまう事が原因です。

そんな時は「Rellax初期化」部分を下記のコードに差し替えます。

// Rellax を初期化
const rellaxin = document.querySelectorAll(".rellax");
// それぞれの親要素にrelativeなwrapperを付与
rellaxin.forEach((el) => {
    const rellax = new Rellax(el, {
        relativeToWrapper: true,
        wrapper: el.parentElement,
    });
    // バグfix
    window.addEventListener("scroll", () => {
        // fix to init
        rellax.refresh();
    });
});

このコードによって、指定した複数のパララックス要素の親要素を基準にそれぞれの要素がパララックスの効果をスタートさせる事ができ、Y軸方向のずれを解決できました。

まとめ

Rellax.jsとLenis.jsを併用することで、視覚的に美しく、操作感も快適なスクロール演出を簡単に実装できます。UI/UXにこだわるサイトや、ブランディングを重視するWeb制作に最適です。

参考:https://qiita.com/Dendai-man/items/0f75df618d8d19ac517e