【jQuery不要】軽量JS「in-view.js」でスクロール連動イベントを簡単実装
by interlife
HTML
<p>「inview.js」は画面に入ったらすぐに<br>「in-view.js」は画面に入ってから100pxスクロールすると実行されます。<br>↓↓↓↓↓↓↓↓↓↓↓↓↓↓</p>
<div class="container">
<!-- ① 通常(すぐ発火) -->
<div class="box box-gray js-inview">
<span>inview.js</span><br>(すぐ出る)
</div>
<!-- ② オフセットあり(100px遅延) -->
<div class="box box-pink js-in-view">
<span>in-view.js</span><br>(100px待つ)
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/protonet-jquery.inview/1.1.2/jquery.inview.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/in-view.min.js"></script>
SCSS
.container {
margin: 100vh 0;
display: flex;
align-items: center;
justify-content: center;
gap: 100px; /* 間隔を広めに */
background: #1565c0;
}
/* ボックスの共通スタイル */
.box {
width: 200px;
height: 200px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
font-weight: bold;
border-radius: 10px;
/* アニメーション設定(初期状態) */
opacity: 0;
transform: translateY(50px);
transition: all 0.8s ease;
}
/* ① 通常ボックス(実線・グレー) */
.box-gray {
border: 4px solid #555;
background-color: #f0f0f0;
color: #333;
}
/* ② 遅延ボックス(点線・ピンク) */
.box-pink {
border: 4px dashed #e91e63;
background-color: #fff0f5;
color: #e91e63;
}
/* ③ 完全表示ボックス(二重線・青) */
.box-blue {
border: 6px double #2196f3;
background-color: #e3f2fd;
color: #1565c0;
}
/* 画面内に入った時に付与するクラス */
.is-show {
opacity: 1;
transform: translateY(0);
}
JavaScript
//inview.jsのscript jQuery必要
$(function(){
$('.js-inview').on('inview', function (event, isInView) {
if (isInView) {
$(this).addClass('is-show');
}
});
});
//in-view.jsのscript jQuery不要
inView.offset(100);
inView('.js-in-view')
.on('enter', el => {
el.classList.add('is-show');
});