大佬教程收集整理的这篇文章主要介绍了Angular - 滚动到页面底部会导致一个函数调用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我的网站上制作一个解决方案,就像在 Instagram 等知名网站上一样, 当用户滚动页面并到达页面底部时,将发送另一个请求并从 API 加载另一张照片。
我有代码:
@HostListener('window:scroll',['$event'])
getScrollHeight(): voID {
if (document.body.scrolltop + window.innerHeight >= document.body.scrollHeight) {
console.log('yes');
this.pagenumber += 1;
this.fetchData(this.pagenumber); //1
}
}
因为在 if
语句中有一个符号 >= 这个返回 true
多次并且方法 this.fetchData()
也被多次调用但我只需要一
当我将 >= 更改为 === 时,有时情况并非如此(它会改变我滚动的速度)
有什么解决办法吗?
工作仓库:https://stackblitz.com/edit/angular-bottom-of-the-page
有几种不同的方法可以解决这个问题。最有可能的是,鉴于您共享的代码,最直接的方法是利用跟踪“加载”状态的属性。您的 stackblitz 示例未显示您问题中的 fetchData
方法。我在下面删掉了一个,假设通话有 1 秒的延迟。
我的假设是,您的 fetchData
调用会加载更多结果,然后使您的页面内容变大,将 window.innerHeight
和 window.scrollY
向下推,以便在以下情况下再次触发此事件第二次到达页面底部。
Is isLoading
属性在您获取更多数据时设置为 true,然后在接收到新数据时设置为 false。这将允许事件多次发生,但应等到第一个事件完成后再触发另一个。
@Component({
SELEctor: "my-app",templateUrl: "./app.component.html",styleUrls: ["./app.component.css"]
})
export class AppComponent {
name = "Angular " + VERSION.major;
pagenumber = 1;
isLoading = false;
@HostListener("window:scroll",["$event"])
getScrollHeight(): void {
if (window.innerHeight + window.scrollY >= document.body.offsetHeight && !this.isLoading) {
console.log("bottom of the page");
this.pagenumber += 1;
this.isLoading = true;
this.fetchData()
.pipe(
tap(() => this.isLoading = falsE)
)
.subscribe();
}
}
fetchData() {
return of('foo')
.pipe(delay(1000));
}
}
另一种方法是使用 Intersection Observer API。
,我认为您正在寻找一种称为无限滚动的功能。在 stackoverflow 中有一些关于这个主题的讨论。一些选项是关于 how to implement infinite scroll pagination using ngx-infinite-scroll 或 without ngx-infinite-scroll 的讨论。
以上是大佬教程为你收集整理的Angular - 滚动到页面底部会导致一个函数调用全部内容,希望文章能够帮你解决Angular - 滚动到页面底部会导致一个函数调用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。