文档:scrollsnapchanging 事件
当浏览器确定新的滚动捕捉目标(即,将在当前滚动操作结束时被选中)待定(pending)时,在 Document 接口的 滚动容器 上触发 scrollsnapchanging 事件。
此事件的工作方式与 Element 接口的 scrollsnapchanging 事件非常相似,不同之处在于整个 HTML 文档必须被设置为滚动捕捉容器(即,在 <html> 元素上设置了 scroll-snap-type)。
语法
在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。
js
addEventListener("scrollsnapchanging", (event) => { })
onscrollsnapchanging = (event) => { }
事件类型
示例
基本用法
假设我们有一个 <main> 元素,其中包含大量会导致其滚动的内容。
html
<main>
<!-- Significant content -->
</main>
可以通过组合 CSS 属性将 <main> 元素转变为滚动容器,例如:
css
main {
width: 250px;
height: 450px;
overflow: scroll;
}
然后,我们可以通过在 <html> 元素上指定 scroll-snap-type 属性,来为滚动内容实现滚动吸附行为。
css
html {
scroll-snap-type: block mandatory;
}
以下 JavaScript 片段会在 <main> 元素的子元素成为待定的捕捉目标时,在 HTML 文档上触发 scrollsnapchanging 事件。在处理函数中,我们在由 snapTargetBlock 属性引用的子元素上设置一个 pending 类,该类可在事件触发时用于对其进行不同的样式设置。
js
document.addEventListener("scrollsnapchanging", (event) => {
// remove previously-set "pending" classes
const pendingElems = document.querySelectorAll(".pending");
pendingElems.forEach((elem) => {
elem.classList.remove("pending");
});
// Set current pending snap target class to "pending"
event.snapTargetBlock.classList.add("pending");
});
在函数开头,我们选择所有先前应用了 pending 类的元素并移除该类,以便只有最新的待定吸附目标会被设置样式。
规范
| 规范 |
|---|
| CSS 滚动捕捉模块级别 2 # scrollsnapchanging |
浏览器兼容性
加载中…
另见
scrollsnapchange事件scrollend事件SnapEvent- CSS
scroll-snap-type属性 - CSS 滚动吸附模块
- 使用滚动捕捉事件
- developer.chrome.com 上的滚动捕捉事件 (2024)