Skip to content

Commit f8890f6

Browse files
committed
Property to use window
1 parent 9f6b5ee commit f8890f6

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ Component props:
7272
| ------------- | ------ | ------- | ----------------------------------------- |
7373
| threshold | number | 0 | Threshold to call loadMore |
7474
| elementScroll | node | - | Element to bind scroll |
75+
| window | bool | false | Bind scroll in window |
7576
| hasMore | bool | true | Tells you if there are more items to load |
7677
| loadMore | func | -- | Call with offset |
7778
| horizontal | bool | false | Changing orientation |

src/lib/InfiniteScroll.svelte

+30-13
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66
export let elementScroll = null;
77
export let hasMore = true;
88
export let reverse = false;
9+
export let window = false;
910
1011
const dispatch = createEventDispatcher();
1112
let isLoadMore = false;
1213
let component;
1314
let beforeScrollHeight;
1415
let beforeScrollTop;
1516
16-
$: if (component || elementScroll) {
17-
const element = elementScroll ? elementScroll : component.parentNode;
17+
$: if (component || elementScroll || window) {
18+
const element = getElement();
1819
1920
if (reverse) {
2021
element.scrollTop = element.scrollHeight;
@@ -25,7 +26,7 @@
2526
}
2627
2728
$: if (isLoadMore && reverse) {
28-
const element = elementScroll ? elementScroll : component.parentNode;
29+
const element = getElement();
2930
3031
element.scrollTop =
3132
element.scrollHeight - beforeScrollHeight + beforeScrollTop;
@@ -34,15 +35,7 @@
3435
const onScroll = e => {
3536
if (!hasMore) return;
3637
37-
let offset = 0;
38-
39-
if (reverse) {
40-
offset = horizontal ? e.target.scrollLeft : e.target.scrollTop;
41-
} else {
42-
offset = horizontal
43-
? e.target.scrollWidth - e.target.clientWidth - e.target.scrollLeft
44-
: e.target.scrollHeight - e.target.clientHeight - e.target.scrollTop;
45-
}
38+
const offset = calcOffset(e, reverse, horizontal);
4639
4740
if (offset <= threshold) {
4841
if (!isLoadMore && hasMore) {
@@ -57,9 +50,33 @@
5750
}
5851
};
5952
53+
const calcOffset = (e, reverse, horizontal) => {
54+
const element = e.target.documentElement
55+
? e.target.documentElement
56+
: e.target;
57+
58+
if (reverse) {
59+
return horizontal ? element.scrollLeft : element.scrollTop;
60+
} else {
61+
return horizontal
62+
? element.scrollWidth - element.clientWidth - element.scrollLeft
63+
: element.scrollHeight - element.clientHeight - element.scrollTop;
64+
}
65+
};
66+
67+
const getElement = () => {
68+
if (window) {
69+
return document;
70+
} else if (elementScroll) {
71+
return elementScroll;
72+
}
73+
74+
return component.parentNode;
75+
};
76+
6077
onDestroy(() => {
6178
if (component || elementScroll) {
62-
const element = elementScroll ? elementScroll : component.parentNode;
79+
const element = getElement();
6380
6481
element.removeEventListener("scroll", null);
6582
element.removeEventListener("resize", null);

0 commit comments

Comments
 (0)