Bonjour à tous, j'essaie d'ajouter "défilement vers le haut du bouton". qui implémentent les éléments suivants:
1.Afficher le bouton lorsque l'utilisateur a fait défiler l'écran vers le bas. 2. Masquer le bouton lorsque l'utilisateur fait défiler l'écran vers le haut. 3.Si vous appuyez sur le bouton, faites défiler l'écran vers le haut et masquez-le. .____.] des suggestions sur la manière de procéder?
merci beaucoup
Pour que cela fonctionne, vous devez:
scroll-content
vers le hautscroll-content
*ngIf
sur le bouton de défilement vers le haut pour afficher conditionnellement après que scroll-content
a atteint un certain seuil.J'ai adapté cette SO réponse à appliquer à l'élément scroll-content
scrollToTop(scrollDuration) {
let scrollStep = -this.ionScroll.scrollTop / (scrollDuration / 15);
let scrollInterval = setInterval( () => {
if ( this.ionScroll.scrollTop != 0 ) {
this.ionScroll.scrollTop = this.ionScroll.scrollTop + scrollStep;
} else {
clearInterval(scrollInterval);
}
}, 15);
scroll-content
positionCet exemple utilise la hauteur de la fenêtre comme seuil pour afficher le bouton de défilement vers le haut de la manière suivante:
this.ionScroll.addEventListener("scroll", () => {
if (this.ionScroll.scrollTop > window.innerHeight) {
this.showButton = true;
} else {
this.showButton = false;
}
});
<button *ngIf="showButton" (click)="scrollToTop(1000)">Scroll Top</button>
import { NavController } from 'ionic-angular/index';
import { Component, OnInit, ElementRef } from "@angular/core";
@Component({
templateUrl:"home.html"
})
export class HomePage implements OnInit {
public ionScroll;
public showButton = false;
public contentData = [];
constructor(public myElement: ElementRef) {}
ngOnInit() {
// Ionic scroll element
this.ionScroll = this.myElement.nativeElement.children[1].firstChild;
// On scroll function
this.ionScroll.addEventListener("scroll", () => {
if (this.ionScroll.scrollTop > window.innerHeight) {
this.showButton = true;
} else {
this.showButton = false;
}
});
// Content data
for (let i = 0; i < 301; i++) {
this.contentData.Push(i);
}
}
// Scroll to top function
// Adapted from https://stackoverflow.com/a/24559613/5357459
scrollToTop(scrollDuration) {
let scrollStep = -this.ionScroll.scrollTop / (scrollDuration / 15);
let scrollInterval = setInterval( () => {
if ( this.ionScroll.scrollTop != 0 ) {
this.ionScroll.scrollTop = this.ionScroll.scrollTop + scrollStep;
} else {
clearInterval(scrollInterval);
}
}, 15);
}
}
<ion-navbar primary *navbar>
<ion-title>
Ionic 2
</ion-title>
<button *ngIf="showButton" (click)="scrollToTop(1000)">Scroll Top</button>
</ion-navbar>
<ion-content class="has-header" #testElement>
<div padding style="text-align: center;">
<h1>Ionic 2 Test</h1>
<div *ngFor="let item of contentData">
test content-{{item}}
</div>
</div>
</ion-content>
Simplifier la scrollToTop()
de adriancarriger
import { Component, ViewChild } from '@angular/core';
import { Content } from 'ionic-angular';
@Component({...})
export class MyPage{
@ViewChild(Content) content: Content;
scrollToTop() {
this.content.scrollToTop();
}
}
Source: http://ionicframework.com/docs/v2/api/components/content/Content/
Tu pourrais essayer ça. En espérant que ça aide
import { Component, ViewChild } from '@angular/core';
import { Content } from 'ionic-angular';
@Component({...})
export class MyPage{
@ViewChild(Content) content: Content;
scrollToTop() {
this.content.scrollToTop();
}
}
Avec l’aide du code adriancarriger, j’ai essayé ce qui suit pour définir l’élément Div sur Top et cela a fonctionné. Voici mon code.
Html
<div #Innholdtext >
<p> add your contents here to set scroll top </>
</div>
app.component.ts
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
export class app implements OnInit {
@ViewChild('Innholdtext') private hovedInnhold : ElementRef;
private scrollElement;
}
ngOnInit() {
this.scrollElement = this.hovedInnhold.nativeElement;
this.scrollElement.addEventListener("click", () =>{
this.hovedInnhold.nativeElement.scrollTop = 0
});
}
Lorsque vous avez un composant dans un composant, vous pouvez avoir des problèmes pour obtenir le contenu dans le composant interne. Cela dit, je devais obtenir l'élément supérieur et appeler pour faire défiler.
Dans mon cas, lorsqu’on passe à la diapositive suivante, je dois être au top pour la diapositive suivante.
const element = document.querySelector(".slide-zoom");
setTimeout(() => { if(element) element.scrollIntoView(true) }, 200);