使用 Intersection Observer API 來偵測元素進入目標的事件

以往我們要做偵測頁面滾動到何處時會偵測 scroll 的事件,然後透過 scroll 捲動回傳的位置再去做不一樣的事情,不過這樣變成你只要捲動就會一直回傳事件,那是否可以讓想要偵測的事件自己去判斷是否已經進入指定的範圍呢? 在現在是可以的,就是使用 Intersection Observer API。

要使用這個 API 的話有幾個步驟。

1. 建立觀察器(observer)

觀察器就是用來設定你要偵測捲動目標是否進入可見範圍的容器,會用以下方法建立:

const observer = new IntersectionObserver(callback, [option])

 

callback 就是當目標(target)進入/離開觀察器(root)的可見範圍會做的事。

option 是選項,都不填就會使用預設值,option 可以填的內容如下:

{
  root: null,
  rootMargin: "0px 0px 0px 0px",
  threshold: [0]
}

其中各項參數說明如下:

root

指定的容器,比如要偵測 #container 內的目標是否進入可見範圍,就可以像這樣設定:

root: document.getElementById('container');

預設為 null 也就是代表整個頁面(body)。

 

rootMargin

意思是移動到目標的相對位置,預設四邊都是 0px,如果設定 10px 的話,代表是距離目標還有 10px 時才會觸發事件,也可以設定負值,比如設定 -20px 的話,代表已經進入目標 20px 後才會觸發事件。

 

threshold

這個參數是設定目標進入可見範圍多少百分比後會觸發,用陣列帶入,比如:

threshold: [0, 0.25, 0.5]

就會目標出現 0%(也就是剛出現)、25% 及 50% 時都觸發事件。

 

2. 指定目標(entry)

就指定要觀察的目標是什麼就對了。

function callback(entry) {}

let observer = new IntersectionObserver(callback);

let img = document.getElementById('img');

observer.observe(img);

 

如果要觀察複數的目標,可以使用迴圈:

const targets = document.querySelectorAll('.box');
for (const target of targets) {
   observer.observe(target);  
 }

 

3. 執行 callback

容器跟目標都設定好後,就可以設計 callback 要做的事了:

const callback = (entries) => { 
    entries.forEach(entry => {
      if(entry.isIntersecting){
        console.log("into")
      }else{
        console.log("leave")
      }
    });
};

 

其中 entry.isIntersecting 會回傳進入或離開,可以判斷該值對兩個狀態做不一樣的事情。

範例程式碼:

 

對頁面的:

 

參考:
[教學] 如何用 Intersection Observer API 實作 Infinite Scroll/Lazy Loading
IntersectionObserver:上篇 – 基本介紹及使用

 

課程推薦

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

《PChome雜誌》攜手 5 位在 AI 領域的專業講師,打造上述 6 堂實用課程,教你學會時下最好用的 AI 工具,導入生成式 AI 來產製工作內容,改造並升級你的工作流程。

輸入折扣碼 ZERO2024 還可以額外獲得 NT$400 優惠喔。

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

本課程專為希望深入了解 HTML 並有效結合 SEO 策略的學員設計。我們將重點放在 HTML 的深度學習與應用上,同時穿插介紹如何透過搜索引擎優化提升網站能見度。透過即時互動式的直播教學,加上 ChatGPT 的輔助,您將學習到如何建立一個結構優良、美觀且符合 SEO 標準的網站。這不僅會提升網站的用戶體驗,還會大幅提高網站的搜索引擎排名,進而增加訪客流量和潛在客戶。
用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

在快速變遷的職場中,提升競爭力成為關鍵。透過引領潮流的AI技術,ChatGPT和Midjourney將助您勇攀高峰。無論您是AI新手還是專家,這個課程將引導您從入門到精通,解密AI的奧秘,並學習如何運用於職場。
GitHub Copilot AI 程式碼編輯工具應用實務班

GitHub Copilot AI 程式碼編輯工具應用實務班

讓學員瞭解有效地使用該工具來加速開發流程、提高程式碼品質和生產力。課程重點放在以 JavaScript 程式語言為例,介紹 Copilot 的基本原理、使用方法和最佳實踐。

輸入折扣碼 TC1456JA 還可以額外獲得 NT$500 優惠喔。

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

掌握Clipchamp AI的操作技巧,靈活運用Clipchamp AI進行影片編輯和創作,實現創意表達和傳播目的。

輸入折扣碼 TC1451JAN 還可以額外獲得 NT$500 優惠喔。

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

Looker Studio除了可協助使用者監控網站流量、廣告成效、選擇匯入資源的管道之外,還可以將數據資料多平台整合、數據報表即時更新、數據範本可重複套用的效益,透過自動化系統,將數據全部匯入同一個報表平台,是企業不可或缺的重要工具。

輸入折扣碼 TC1270JIA 還可以額外獲得 NT$500 優惠喔。

和我們交流

加入我們的社群,裡面會有一些技術的內容、有趣的技術梗,以及職缺的分享,歡迎和我們一起討論。