前言
本文為「JavaScript 30」教學影片的學習筆記。
目標
做出頁面往下滾時,圖片滑入、滑出文章的效果。
筆記
使用作者從網路上抓下來的 debounce()
方法,這是讓指定方法在一定時間(毫秒)內只能觸發一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function debounce(func, wait = 20, immediate = true) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; };
|
首先選取所有圖片元素。
1
| const sliderImages = document.querySelectorAll('.slide-in');
|
設定一個 checkSlide(e)
方法,使得頁面滾到指定高度時,讓圖片滑入、滑出文章。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| function checkSlide() { sliderImages.forEach(sliderImage => { const slideInAt = (window.scrollY + window.innerHeight - sliderImage.height / 2);
const imageBottom = sliderImage.offsetTop + sliderImage.height;
const isHalfShown = slideInAt > sliderImage.offsetTop;
const isNotScrollPast = window.scrollY < imageBottom;
if (isHalfShown && isNotScrollPast) { sliderImage.classList.add('active'); } else { sliderImage.classList.remove('active'); } }); }
|
offsetTop
屬性代表元素與螢幕頂端的距離。
監聽 window
物件,使其在 scroll
事件發生時,觸發 checkSlide()
方法。
1
| window.addEventListener('scroll', debounce(checkSlide));
|