文件:scroll 事件

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

當文件檢視被滾動時,會觸發 scroll 事件。要檢測滾動何時完成,請參閱 Documentscrollend 事件。對於元素滾動,請參閱 Elementscroll 事件。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("scroll", (event) => { })

onscroll = (event) => { }

事件型別

一個通用的 Event

示例

滾動事件節流

由於 scroll 事件的觸發頻率可能很高,事件處理程式不應執行計算密集型操作,例如 DOM 修改。如果您在快速滾動時注意到 卡頓,您應該考慮 節流 事件。

請注意,您可能會看到使用 requestAnimationFrame() 來節流 scroll 事件處理程式的程式碼。這是無用的,因為動畫幀回撥的觸發頻率與 scroll 事件處理程式相同。相反,您必須自己測量超時,例如使用 setTimeout()

js
let lastKnownScrollPosition = 0;
let ticking = false;

function doSomething(scrollPos) {
  // Do something with the scroll position
}

document.addEventListener("scroll", (event) => {
  lastKnownScrollPosition = window.scrollY;

  if (!ticking) {
    // Throttle the event to "do something" every 20ms
    setTimeout(() => {
      doSomething(lastKnownScrollPosition);
      ticking = false;
    }, 20);

    ticking = true;
  }
});

或者,考慮改用 IntersectionObserver,它允許基於閾值的監聽。

規範

規範
CSSOM 檢視模組
# eventdef-document-scroll
HTML
# handler-onscroll

瀏覽器相容性

另見