【发布时间】:2021-08-14 06:14:51
【问题描述】:
我想在 ion-content 上有或没有滚动条时隐藏或显示元素。更具体地说,我想在没有滚动条时显示一个按钮(以在列表中加载更多项目)并在有滚动条的地方隐藏它(因此更多项目的加载由 ion-infinite-scroll 完成)。
我的 Ionic 应用程序也将部署到桌面,因此大屏幕用户最初不会看到滚动条,因此不会触发 ion-infinite-scroll。
这是一个展示该问题的演示:
home.page.html
<ion-header>
<ion-toolbar>
<ion-title>
Ionic header
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<div class="ion-padding">
<p *ngFor="let item of itemList">{{ item }}</p>
<!-- How to hide this button when ion-content has a scrollbar? -->
<!-- *ngIf="???" -->
<ion-button (click)="incrementItemList(5)">Load more items</ion-button>
</div>
<ion-infinite-scroll (ionInfinite)="loadMoreItems($event)">
<ion-infinite-scroll-content loadingSpinner="crescent"></ion-infinite-scroll-content>
</ion-infinite-scroll>
</ion-content>
<ion-footer>
<ion-toolbar>
<ion-title>
Ionic footer
</ion-title>
</ion-toolbar>
</ion-footer>
home.page.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage {
itemList: string[] = [];
constructor() {}
ionViewWillEnter() {
this.incrementItemList(5);
}
incrementItemList(times: number) {
for (let i = 1; i <= times; i++) {
this.itemList.push(`Lorem ipsum dolor sit amet consectetur adipisicing elit. Quia placeat nam sapiente iusto eligendi`);
}
}
loadMoreItems(event: any) {
setTimeout(() => {
this.incrementItemList(15);
event.target.complete();
}, 1000);
}
}
我正在使用 Ionic 4.5.0 + Angular。
我尝试过使用getScrollElement、scrollHeight、clientHeight、offsetHeight,但没有成功。
有什么想法吗?
【问题讨论】:
-
你能设置一个最初为假的标志,当你调用 loadMore 方法时你会使其为真?是的,如果它有效,那么您还需要在加载附加数据后再次将标志反转为 false。
-
@SunnyParekh 这不是一个万无一失的解决方案,因为屏幕大小因用户而异,并且在第一次调用 loadMore 方法后可能不会出现滚动条,因为可能没有足够的内容来触发滚动条。无论如何感谢您的帮助。
标签: angular ionic-framework scrollbar ionic4 ion-content