38 lines
871 B
TypeScript
38 lines
871 B
TypeScript
import Diff from "./Diff"
|
|
|
|
let container: HTMLElement
|
|
let threshold: number
|
|
|
|
export default function infiniteScroll(scrollContainer: HTMLElement, scrollThreshold: number) {
|
|
container = scrollContainer
|
|
threshold = scrollThreshold
|
|
|
|
container.addEventListener("scroll", _ => {
|
|
// Wait for mutations to finish before checking if we need infinite scroll to trigger.
|
|
if(Diff.mutations.length() > 0) {
|
|
Diff.mutations.wait(check)
|
|
return
|
|
}
|
|
|
|
// Otherwise, queue up the check immediately.
|
|
// Don't call check() directly to make scrolling as smooth as possible.
|
|
Diff.mutations.queue(() => check())
|
|
})
|
|
}
|
|
|
|
function check() {
|
|
if(container.scrollTop + container.clientHeight >= container.scrollHeight - threshold) {
|
|
loadMore()
|
|
}
|
|
}
|
|
|
|
function loadMore() {
|
|
const button = document.getElementById("load-more-button")
|
|
|
|
if(!button) {
|
|
return
|
|
}
|
|
|
|
button.click()
|
|
}
|