
久々に1ページモノのLP作成がありまして。非常に簡単なものでペラペラ1枚で問題ないということだったんですが、さすがにそれでは寂しかろうということでjQueryを利用して簡単なパララックスみたいなものを実装。お題は
背景を固定じゃなくてパララックスっぽく少しずつスクロールさせる
にしました。最近は脱jQueryな流れもあったりしますが、簡単なものなら便利に使えるのに越したことはないと思います。近年のデバイスなら重さも気にしないで大丈夫ですしね。
とはいえ、忘れっぽい最近の筆者なので調べなおしての覚書(いやー、流れゆく年月には勝てませんねw)。
まずはざっくりとhtmlを書く
背景画像をbodyに設定してヘッダー時にはその背景をそのまま生かす形に。
各記事は別背景(もしくはシンプルに白の背景)でちゃんと内容をみせる。
というのを設定して、ざっくりhtml(cssも一緒に)書いていきます。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>scroll test</title>
<link rel="stylesheet" href="">
<style>
body {
background-image: url(img/sample.jpeg);
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
}
header,footer {
height: 80vh;
}
article {
margin-bottom: 50vh;
height: 120vh;
background-color: white;
text-align: center;
}
</style>
</head>
<body>
<header></header>
<div class="main">
<article class="part1">TEST1</article>
<article class="part2">TEST2</article>
<article class="part3">TEST3</article>
</div>
<footer></footer>
</body>
</html>
こんな感じでしょうか。この時点では背景固定で記事部分がスクロール(可動)する感じですね。これを改良しましょう…といってもお手軽ですのでご安心を。
jQueryはgoogleのCDNで

ダウンロードして組み込む方法でもいいのですが、ここはテスト的な意味合いもあるのでさくっとgoogle先生のお世話になっちゃいましょう。ここでは2.1.3を使用しています。以下のタグをbodyの前にコピペ。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
背景スクロール部分を実装
実装するイメージとしては
- cssのbackgroundPositionの縦軸をスクロールに合わせて変化させる
という感じですね。実際のコードは以下のようになりました。
<script>
$(function(){
var Height = $('body').height();
$(window).scroll(function () {
var ScrollTop = $(document).scrollTop();
var Position = 100/Height*ScrollTop;
$('body').css(
{backgroundPositionY: Position+"%"}
);
});
});
</script>
bodyの高さ、scrollTopでブラウザのスクロール量を取得。
それをbodycssにbackgroundPositionYでパーセントで付与してスクロールさせるといった感じですね。
パーセントで付与するために100を高さで割ったものに、スクロール量をかけることで計算。画像サイズなどによっては補正してあげてもいいかもです。
scrollTop参照:http://www.jquerystudy.info/reference/css/scrollTop.html
実装はこれだけ。お手軽でしょ?
どんな感じで付与されているのかを確認してみると

こんな感じ。
数値をマイナスにしてあげれば、ブラウザスクロールとは逆方向に動くなんて処理もできちゃいますね。
まとめ
いかがでしたでしょうか? …というより、覚書でもあるので覚えておけよ、俺って感じではあるのですがw
背景画像によってはcssでポジションを設定したりなど調整が必要かもしれません。ご注意くださいまで。
以下にコードを載せておきますのでコピペ等で試してみてね。
今回のコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>scroll test</title>
<link rel="stylesheet" href="">
<style>
body {
background-image: url(img/sample.jpeg);
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
}
header,footer {
height: 80vh;
}
article {
margin-bottom: 50vh;
height: 120vh;
background-color: white;
text-align: center;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(function(){
var Height = $('body').height();
$(window).scroll(function () {
var ScrollTop = $(document).scrollTop();
var Position = 100/Height*ScrollTop;
$('body').css(
{backgroundPositionY: Position+"%"}
);
});
});
</script>
</head>
<body>
<header></header>
<div class="main">
<article class="part1">TEST1</article>
<article class="part2">TEST2</article>
<article class="part3">TEST3</article>
</div>
<footer></footer>
</body>
</html>