記事公開日

自力で「慣性スクロール&パララックス」を実装

お客さん

慣性スクロール&パララックスを使ったデザインを組み込みたいの。

巷では「luxy.js」みたいなJavaScriptプラグインを使ってるみたいだけど、もっと自由にカスタマイズしたいし、権利的にも不安・・・

だから、自力で実装したいんだけど、どうしたらいい?

隊員1号

了解です!

jQueryを使ったサンプルを紹介します。

以下のコードを参考にしてみてください↓

DEMO「慣性スクロール&パララックス」のサンプル

SAMPLE

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>DEMO「慣性スクロール&パララックス」のサンプル</title>
<style>

#flame {
	margin:0 0 50vh;
}
.com {
	margin:15vh 0 35vh;
	text-align:center;

}
#box {
	position:relative;
	width:50%;
	margin:0 auto;
}
#img1 {
	width:100%;
}
#img2 {
	position:absolute;
	top:-10%;
	left:-10%;
	width:60%;
	height:auto;
}
#img3 {
	position:absolute;
	top:60%;
	right:-10%;
	width:70%;
	height:auto;

}
/* 慣性スクロール */
#img1,
#img2,
#img3 {
	will-change:transform;
	transition-duration:0.7s;
	transition-delay:0s;
	transition-timing-function:ease-out;
}

</style>
<script src="js/jquery.min.js"></script>
<script>

	$(function(){

		<!-- 画面の高さを取得 -->
		var windowHeight = $(window).height();

		<!-- スクロール時に実行 -->
		$(window).on("scroll", function() {

			<!-- スクロールの位置を取得 -->
			var scroll = $(window).scrollTop();

			<!-- 対象ID -->
			var arr = [ 
				"img1",
				"img2",
				"img3",
			];

			<!-- ループ -->
			$.each(arr, function(i, val) {

				<!-- 要素が画面内に入った瞬間を検知 -->
				if(scroll+ windowHeight > $('#' + val).offset().top) {

					<!-- スクロールを元に要素の動きを調整 -->
					$('#img1').css('margin-top',($('#img1').offset().top - scroll) / 15);
					$('#img2').css('margin-top',($('#img2').offset().top - scroll) / 3);
					$('#img3').css('margin-top',($('#img3').offset().top - scroll) / 6);

				}
			});
		});

	});

</script>
</head>

<body>

	<div id="flame">

		<div class="com">↓↓↓ 下へスクロール ↓↓↓</div>

		<div id="box">
			<img src="image/muscat.jpg" id="img1">
			<img src="image/budou.jpg" id="img2">
			<img src="image/melon.jpg" id="img3">
		</div>

	</div>

</body>
</html>
この記事のURLをコピー

メールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

関連情報

運営者プロフィール
運営者のプロフィール画像
隊員1号

IT系フリーランスとして10年の経験を持つレスキュー隊。HTML・CSS・JS・PHPなど幅広いスキルを持つ。

詳しいプロフィール