Skip to content

Commit 7a35469

Browse files
committed
feat(intersect): scrolling direction detection
1 parent 693dce8 commit 7a35469

3 files changed

Lines changed: 13 additions & 0 deletions

File tree

.changeset/few-carrots-tell.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@svelte-put/intersect': patch
3+
---
4+
5+
Support the `direction` property in `event.detail` for scrolling direction detection

packages/actions/intersect/src/intersect.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,19 +104,25 @@ declare global {
104104
*/
105105
export function intersect(node: HTMLElement, parameters: IntersectParameters = { enabled: true }) {
106106
let hasIntersect = false;
107+
let previousY = 0;
108+
107109
let { root, rootMargin, threshold, enabled = true } = parameters;
108110
const callback: IntersectionObserverCallback = (entries, observer) => {
111+
const y = entries[0].boundingClientRect.y ?? 0;
109112
if (entries.some((e) => !!e.intersectionRatio)) {
113+
const direction = y < previousY ? 'down' : 'up';
110114
const detail: IntersectDetail = {
111115
observer,
112116
entries,
117+
direction,
113118
};
114119
node.dispatchEvent(new CustomEvent('intersect', { detail }));
115120
if (!hasIntersect && entries.some((e) => e.isIntersecting)) {
116121
node.dispatchEvent(new CustomEvent('intersectonce', { detail }));
117122
hasIntersect = true;
118123
}
119124
}
125+
previousY = y;
120126
};
121127

122128
let observer = new IntersectionObserver(callback, {

packages/actions/intersect/src/intersect.types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,6 @@ export interface IntersectDetail {
4747
readonly observer: IntersectionObserver;
4848
/** list of IntersectionObserverEntry passed from IntersectionObserver callback */
4949
readonly entries: IntersectionObserverEntry[];
50+
/** scrolling direction */
51+
readonly direction: 'up' | 'down';
5052
}

0 commit comments

Comments
 (0)