スクロールすると、要素がでてくるやつをjqueryを使用して実装します。
<仕様>
①ページをスクロールして、隠れている要素がブラウザの画面高さの1/4に到達したら要素を表示する。
②対象要素は5.6.7の三つ。
それでは、解説。
○index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/sanitize.css">
<link rel="stylesheet" href="css/common.css">
<title>デモ</title>
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/index.css">
</head>
<body>
<!--header-->
<header></header>
<main ontouchstart="">
<div class="Container">
<div class="sideMargin">
<div class="itemBlock">
<div class="block block1">
<p>1</p>
</div>
<div class="block block2">
<p>2</p>
</div>
<div class="block block3">
<p>3</p>
</div>
<div class="block block4">
<p>4</p>
</div>
<div class="block block5">
<p>5</p>
</div>
<div class="block block6">
<p>6</p>
</div>
<div class="block block7">
<p>7</p>
</div>
</div>
</div>
</div>
</main>
<!--footer-->
<footer>
<script src="js/jquery-2.0.0.min.js"></script>
<script src="js/common.js"></script>
</footer>
</body>
</html>
・div class=block block4、div class=block block5、div class=block block6の3つの要素をスクロールしたら表示するようにします。
○index.css
.Container {
padding: 50px 0;
background-color: #9e9e9e40; }
.sideMargin {
padding: 0 10px; }
.itemBlock {
background-color: white;
max-width: 780px;
margin: 0 auto; }
.block {
background-color: blue;
height: 300px;
width: 300px;
margin: 0 auto 20px;
-webkit-transform: translateY(50px);
transform: translateY(50px);
opacity: 0;
-webkit-transition: 0.5s;
transition: 0.5s; }
.block p {
color: #fff;
font-size: 3.0rem; }
.block1,
.block2,
.block3,
.block4 {
-webkit-transform: translateY(0px);
transform: translateY(0px);
opacity: 1; }
.fadeIn {
-webkit-transform: translateY(0px);
transform: translateY(0px);
opacity: 1; }
①block
・transformを適用して本来の表示位置からY軸方向に50px移動
・表示を消すためにopacityを適用して要素を透明にする
・transitionを適用して一定時間でcssを変化させるようにする(今回は0.5秒)
②fadeIn・・・block要素を表示させる設定にする。
・ずれた要素をもとの位置にするためにtransformを再度適用
・透明の要素を表示させるためにopacityを再度適用
○common.js
$(function(){
$(window).scroll(function(){
var fade5 = $('.block5').offset().top;
var fade6 = $('.block6').offset().top;
var fade7 = $('.block7').offset().top;
var scroll = $(window).scrollTop();
var windowHeight = $(window).height();
if (scroll > fade5 - windowHeight + windowHeight/4){
$('.block.block5').addClass('fadeIn');
}
if (scroll > fade6 - windowHeight + windowHeight/4){
$('.block.block6').addClass('fadeIn');
}
if (scroll > fade7 - windowHeight + windowHeight/4){
$('.block.block7').addClass('fadeIn');
}
});
});
① var fade = $().offset().top;
変数fadeは、$()要素のy軸上の値(一番上から、要素までの距離)
② var scroll = $(window).scrollTop();
変数scrollはブラウザのスクロールした値
③ var windowHeight = $(window).height();
変数windowHeightはブラウザの縦の大きさ
④ if (scroll > fade5 – windowHeight + windowHeight/4){}
『隠れている要素が、ブラウザの1/4の高さに到達したら』という条件
⑤ $().addClass(‘fadeIn’);
$()要素にfadeInというクラスを追加する
これで、スクロールすると要素が下から出てくるよく見る動きになります。
今回は以上です。