Quelle est la meilleure pratique pour vérifier si l'utilisateur a fait défiler vers le bas de la page dans Angular2 sans jQuery? Ai-je accès à la fenêtre de mon composant d'application? Sinon, dois-je vérifier le défilement vers le bas du composant pied de page, et comment dois-je procéder? Une directive sur le pied de page? Quelqu'un a-t-il accompli cela?
// Vous pouvez l'utiliser.
@HostListener("window:scroll", [])
onScroll(): void {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
// you're at the bottom of the page
}
}
Pour moi, le bas de ma chatbox n'était pas en bas de la page, donc je ne pouvais pas utiliser window.innerHeight pour voir si l'utilisateur faisait défiler vers le bas de la chatbox. (Mon objectif était de toujours faire défiler vers le bas du chat, sauf si l'utilisateur essaie de faire défiler vers le haut)
J'ai plutôt utilisé ce qui suit qui fonctionnait parfaitement:
let atBottom = element.scrollHeight - element.scrollTop === element.clientHeight
un certain contexte:
@ViewChild('scrollMe') private myScrollContainer: ElementRef;
disableScrollDown = false
ngAfterViewChecked() {
this.scrollToBottom();
}
private onScroll() {
let element = this.myScrollContainer.nativeElement
let atBottom = element.scrollHeight - element.scrollTop === element.clientHeight
if (this.disableScrollDown && atBottom) {
this.disableScrollDown = false
} else {
this.disableScrollDown = true
}
}
private scrollToBottom(): void {
if (this.disableScrollDown) {
return
}
try {
this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;
} catch(err) { }
}
et
<div class="messages-box" #scrollMe (scroll)="onScroll()">
<app-message [message]="message" *ngFor="let message of messages.slice().reverse()"></app-message>
</div>
Plutôt que d'utiliser document.body.offsetHeight, utilisez ceci:
if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) { // you're at the bottom of the page }