wekan/client/lib/infiniteScrolling.js

48 lines
1.1 KiB
JavaScript
Raw Normal View History

const PEAK_ANTICIPATION = 200;
/**
* Infinite scrolling utility to replace the BlazeComponent mixin.
*
* Usage in a Template:
* Template.myTemplate.onCreated(function () {
* this.infiniteScrolling = new InfiniteScrolling();
* });
*
* The scroll event must be wired in Template.events:
* 'scroll .my-container'(event, tpl) {
* tpl.infiniteScrolling.checkScrollPosition(event.currentTarget, () => {
* tpl.loadNextPage();
* });
* },
*
* Or for components that delegate to a child for loading:
* tpl.infiniteScrolling.checkScrollPosition(event.currentTarget, () => {
* activitiesComponent.loadNextPage();
* });
*/
export class InfiniteScrolling {
constructor() {
this._nextPeak = Infinity;
}
setNextPeak(v) {
this._nextPeak = v;
}
getNextPeak() {
return this._nextPeak;
}
resetNextPeak() {
this._nextPeak = Infinity;
}
checkScrollPosition(domElement, reachNextPeakCallback) {
let altitude = domElement.scrollTop + domElement.offsetHeight;
altitude += PEAK_ANTICIPATION;
if (altitude >= this._nextPeak) {
reachNextPeakCallback();
}
}
}