- 記事公開日
自力で「慣性スクロール&パララックス」を実装
慣性スクロール&パララックスを使ったデザインを組み込みたいの。
巷では「luxy.js」みたいなJavaScriptプラグインを使ってるみたいだけど、もっと自由にカスタマイズしたいし、権利的にも不安・・・
だから、自力で実装したいんだけど、どうしたらいい?
了解です!
jQueryを使ったサンプルを紹介します。
以下のコードを参考にしてみてください↓
<!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>