ngx-infinite-scroll 滚动事件不会停止触发

ngx-infinite-scroll scrolled event won't stop firing

我用 ngx-infinite-scroll 实现了无限滚动。当用户到达可滚动元素的底部(具有固定高度)时,事件 'scrolled' 将触发并调用 API 以将更多项目加载到该元素中。

问题是,当我显示更多数据时,滚动级别会自动更改并且事件会再次触发。我只想让这个事件由用户手动触发。当我加载更多数据时,有没有办法阻止滚动级别?

   <div
        class="project-feed-container"
        infiniteScroll
        [infiniteScrollDistance]="2"
        [infiniteScrollThrottle]="50"
        [alwaysCallback]="true"
        [scrollWindow]="false"
        (scrolled)="onScroll()"
    >

       <!-- *ngFor with content -->

    </div>

这是 API 响应触发新请求的可能解决方案。它基于检查应用程序是否可以执行新请求的几个标志。

canLoad。它控制应用程序是否可以从 API.

加载新项目

pendingLoad。保留将在下一次轮询迭代时触发的排队操作。

// NgOnInit to set a time interval to check status. Adjust timing to your need. 
ngOnInit() {
  setInterval( () => {
    this.canLoad = true;
    if ( this.pendingLoad ) {
      this.onScrollDown();
    }
  }, 2000);
}

然后,当触发滚动功能时,应用程序应检查是否允许调用 API 并添加新元素。

onScrollDown() {
    if ( this.canLoad ) {
      this.canLoad = false;
      this.pendingLoad = false;

      // Call API here
      this.appendItems(0, apiData);
    } else {
      this.pendingLoad = true;
    }
  }

这是一个带有演示的 StackBlitz link

您可以在您的标签中使用可选输入 [infiniteScrollDisabled] 并通过您的打字稿设置布尔值。

 <div
        class="project-feed-container"
        infiniteScroll
        [infiniteScrollDistance]="2"
        [infiniteScrollThrottle]="50"
        [infiniteScrollDisabled]="scrollCheck"
        [alwaysCallback]="true"
        [scrollWindow]="false"
        (scrolled)="onScroll()"
    >
    </div>

检查 ts 文件中所需的适当条件,并将布尔值设置为 true

scrollCheck: boolean = false;

onScrollDown() {
    if(condition){
       this.scrollCheck=true;
    }
    //other code
}

在我的例子中,它有助于将无限滚动距离设置为 0,因为这样它只会在滚动结束时发出新请求 我的代码是这样的:

<div infiniteScroll (scrolledUp)="onScrollUp()" (scrolled)="onScrollDown()" [scrollWindow]="false" [infiniteScrollDistance]="0">