よくポートフォリオサイトなどで見かけるスクロールすると画像がフェードインしてくる感じのものが作れます。
IntersectionObserver
".made-item"が付いている要素を取得して、それぞれの要素が特定のスクロールポイントに来たときにclassを付与、消去するプログラムです。
function() {
const items = document.querySelectorAll('.made-item')
const cb = function(entries, observer) {
entries.forEach(entry => {
if (entry.isIntersecting) {
console.log('はいったときの処理');
console.log(entry.target);
entry.target.classList.add('inview')
} else {
console.log('でたときの処理');
entry.target.classList.remove('inview')
}
})
}
const options = {
root: null,
//交差する要素を設定できる 変更することはあまりない
rootMargin: '0px 0px -300px 0px',
//交差点の場所をmarginのように指定できる
threshold: 0
// 初期値は0 0は交差点に入ってくる要素の下の部分 1は上の部分でcbが呼ばれる
// 配列で[0, 0.5, 1とすると要素の上、真ん中、下でそれぞれcbが呼ばれる
}
const io = new IntersectionObserver(cb, options)
items.forEach(item => {
io.observe(item)
// io.observe(item2)
// io.observe(item3)
// ioの中に↑こんな感じで要素を複数入れられます
})
}
- querySelictorAllで複数のclassを指定
- forEachでそれを回して変数io(newしたIntersectionObserver)に代入
- 上記の要素がcbの引数entriesに入るので入ったとき、出たときの処理を記入
- 交差点の要素はentry.targetで確認できる
scrollY
let scroll = 0
function() {
scroll = window.scrollY
console.log(scroll);
}
- スクロールで上端からのピクセル数を検知