此頁面由社群從英文翻譯而來。了解更多並加入 MDN Web Docs 社群。

View in English Always switch to English

Document:scroll 事件

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2015年7月⁩.

scroll 事件會在文件視區被捲動時觸發。若要偵測捲動完成的時機,參見 Documentscrollend 事件。若是元素的捲動,參見 Elementscroll 事件。

語法

在例如 addEventListener() 等方法中使用事件名稱,或設定事件處理屬性。

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

onscroll = (event) => { }

事件類型

通用的 Event

範例

捲動事件的節流

由於 scroll 事件可能以高頻率觸發,事件處理器不應執行計算量大的操作,例如 DOM 修改。建議透過 requestAnimationFrame()setTimeout()CustomEvent 進行節流處理,如下所示。

然而需要注意的是,輸入事件和動畫幀的觸發頻率大致相同,因此以下的最佳化通常不是必要的。此範例針對 requestAnimationFrame 最佳化了 scroll 事件。

js
let lastKnownScrollPosition = 0;
let ticking = false;

function doSomething(scrollPos) {
  // 依據捲動位置進行某些操作
}

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

  if (!ticking) {
    window.requestAnimationFrame(() => {
      doSomething(lastKnownScrollPosition);
      ticking = false;
    });

    ticking = true;
  }
});

規範

Specification
CSSOM View Module
# eventdef-document-scroll
HTML
# handler-onscroll

瀏覽器相容性

參見