SnapEvent
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The SnapEvent
interface defines the event object for the scrollsnapchanging
and scrollsnapchange
events. Respectively, these fire on on a scroll container when the browser determines that a new scroll snap target is pending (will be selected when the current scroll gesture ends), and when a new snap target is selected.
These events can be used to run code in response to new elements being snapped to; SnapEvent
exposes references to the element snapped to in the inline and/or block direction. The property values available on SnapEvent
correspond directly to the value of the scroll-snap-type
CSS property set on the scroll container:
- If the snap axis is specified as
block
(or a physical axis value that equates toblock
in the current writing mode), onlysnapTargetBlock
returns an element reference. - If the snap axis is specified as
inline
(or a physical axis value that equates toinline
in the current writing mode), onlysnapTargetInline
returns an element reference. - If the snap axis is specified as
both
,snapTargetBlock
andsnapTargetInline
return an element reference.
Constructor
SnapEvent()
Experimental-
Creates a new
SnapEvent
object instance.
Instance properties
Inherits properties from its parent, Event
.
snapTargetBlock
Read only Experimental-
Returns a reference to the element snapped to in the block direction when the event fired, or
null
if scroll snapping only occurs in the inline direction so no element is snapped to in the block direction. snapTargetInline
Read only Experimental-
Returns a reference to the element snapped to in the inline direction when the event fired, or
null
if scroll snapping only occurs in the block direction so no element is snapped to in the inline direction.
Examples
scrollsnapchanging
example
In the following scrollsnapchanging
handler function snippet, we set the snapTargetBlock
element's class
attribute to pending
using the Element.className
property, which could be used to style the element differently when it becomes a pending snap target.
Note that this handler is intended to be set on a block-direction scroll container (vertically-scrolling if the page is set to a horizontal writing-mode
), therefore only the snapTargetBlock
element will change between multiple events firing. SnapEvent.snapTargetInline
will return null
, because no snapping occurs in the inline direction.
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
example
In the following scrollsnapchange
handler function snippet, we set a selected
class on the SnapEvent.snapTargetBlock
element, which could be used to style a newly-selected snap target to look like it has been selected (for example, with an animation).
scrollingElem.addEventListener("scrollsnapchange", (event) => {
event.snapTargetBlock.className = "selected";
});
Specifications
Specification |
---|
CSS Scroll Snap Module Level 2 # snapevent-interface |
Browser compatibility
BCD tables only load in the browser
See also
scrollsnapchanging
eventscrollsnapchange
event- CSS scroll snap module
- Using scroll snap events
- Scroll Snap Events on developer.chrome.com (2024)