SnapEvent

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

SnapEvent 介面定義了 scrollsnapchangingscrollsnapchange 事件的事件物件。分別地,當瀏覽器確定一個新的滾動吸附目標(將在當前滾動操作結束時被選中)即將生效時,這些事件會在一個 滾動容器上觸發;當一個新的吸附目標被選中時,也會在 scrollsnapchange 事件上觸發。

這些事件可用於響應新元素被吸附的程式碼;SnapEvent 暴露了內聯和/或塊方向上被吸附元素的引用。SnapEvent 上可用的屬性值直接對應於設定在滾動容器上的 scroll-snap-type CSS 屬性的值。

  • 如果吸附軸被指定為 block(或在當前書寫模式下等同於 block 的物理軸值),則只有 snapTargetBlock 返回一個元素引用。
  • 如果吸附軸被指定為 inline(或在當前書寫模式下等同於 inline 的物理軸值),則只有 snapTargetInline 返回一個元素引用。
  • 如果吸附軸被指定為 both,則 snapTargetBlocksnapTargetInline 都會返回一個元素引用。
Event SnapEvent

建構函式

SnapEvent() 實驗性

建立一個新的 SnapEvent 物件例項。

例項屬性

繼承其父級 Event 的屬性。

snapTargetBlock 只讀 實驗性

返回一個在事件觸發時吸附到塊方向的元素的引用,如果滾動吸附只發生在內聯方向,則沒有元素吸附到塊方向,則返回 null

snapTargetInline 只讀 實驗性

返回一個在事件觸發時吸附到內聯方向的元素的引用,如果滾動吸附只發生在塊方向,則沒有元素吸附到內聯方向,則返回 null

示例

scrollsnapchanging 示例

在下面的 scrollsnapchanging 處理函式片段中,我們使用 Element.className 屬性將 snapTargetBlock 元素的 class 屬性設定為 pending,這可以用於在元素成為一個待定的吸附目標時對其進行不同的樣式設定。

請注意,此處理函式旨在設定在一個塊方向的滾動容器上(如果頁面設定為水平 writing-mode,則為垂直滾動),因此在多個事件觸發之間只有 snapTargetBlock 元素會發生變化。SnapEvent.snapTargetInline 將返回 null,因為在內聯方向沒有發生吸附。

js
scrollingElem.addEventListener("scrollsnapchanging", (event) => {
  // Set current pending snap target class to "pending"
  event.snapTargetBlock.className = "pending";

  // Logs the new pending block-direction snap target element
  console.log(event.snapTargetBlock);

  // Logs null; no inline snapping occurs
  console.log(event.snapTargetInline);
});

scrollsnapchange 示例

在下面的 scrollsnapchange 處理函式片段中,我們在 SnapEvent.snapTargetBlock 元素上設定了一個 selected 類,這可用於為新選中的吸附目標設定樣式,使其看起來已被選中(例如,帶有動畫)。

js
scrollingElem.addEventListener("scrollsnapchange", (event) => {
  event.snapTargetBlock.className = "selected";
});

規範

規範
CSS 滾動捕捉模組級別 2
# snapevent-interface

瀏覽器相容性

另見