dataAll = []
data = []
loadDataOpt = {
pageNo: 0,
hasMore: false,
pageSize: 15,
isLoading: false
};
getScreenBottomLastItemData(): number {
const $list = document.querySelectorAll('.item');
const $last = $list[$list.length - 1];
const toBottom = window.innerHeight - $last.getBoundingClientRect().top;
return toBottom;
}
loadDataByScroll(): void {
let { pageNo } = this.loadDataOpt;
const { pageSize } = this.loadDataOpt;
pageNo += 1;
const totalSize = this.dataAll.length;
const isLoadonePage = totalSize - this.data.length > pageSize;
if (isLoadOnePage) {
this.data = this.dataAll.slice(0, pageNo * pageSize);
} else {
this.data = this.dataAll.slice(0, totalSize);
}
// change status
this.loadDataOpt.isLoading = false;
this.loadDataOpt.hasMore = totalSize > this.data.length;
this.loadDataOpt.pageNo += 1;
}
const subscription = fromEvent(window, 'scroll')
.pipe(debounceTime(20))
.subscribe(() => {
if (this.loadDataOpt.isLoading) {
return;
}
if (this.loadDataOpt.hasMore === true) {
const toBottom = this.getScreenBottomLastItemData();
if (toBottom > 266) {
this.loadDataOpt.isLoading = true;
setTimeout(() => {
this.loadDataByScroll();
}, 0.5 * 1000);
}
} else {
// 如果不需要监听scroll做其他事情了,没有更多数据了可以取消订阅
subscription.unsubscribe();
}
});