Cherche quelque chose de similaire à scrollIntoView()
dans Ionic2 à utiliser lorsque je clique sur un bouton, par exemple.
Aucune des méthodes détaillées dans ion-content
help.
S'il vous plaît jeter un oeil à ce plongeur de travail
Vous pouvez utiliser la méthode scrollTo(x,y,duration)
(docs) . Le code est assez simple, nous obtenons d’abord la position de l’élément cible (un <p></p>
dans ce cas) et nous l’utilisons ensuite dans la méthode scrollTo(...)
D'abord la vue:
<ion-header>
<ion-navbar primary>
<ion-title>
<span>My App</span>
</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<button ion-button text-only (click)="scrollElement()">Click me</button>
<div style="height: 600px;"></div>
<!-- Notice the #target in the p element -->
<p #target>Secret message!</p>
<div style="height: 600px;"></div>
</ion-content>
Et le code du composant:
import { ViewChild, Component } from '@angular/core';
import { NavController, Content } from 'ionic-angular';
@Component({
templateUrl:"home.html"
})
export class HomePage {
@ViewChild(Content) content: Content;
@ViewChild('target') target: any;
constructor() { }
public scrollElement() {
// Avoid reading the DOM directly, by using ViewChild and the target reference
this.content.scrollTo(0, this.target.nativeElement.offsetTop, 500);
}
}
J'ai remarqué que la solution ci-dessus ne fonctionnait pas bien avec le rendu SSR (Angular Universal Render) côté serveur car document
n'était pas disponible côté serveur.
J'ai donc écrit un plugin pratique pour faire défiler des éléments angulaires de 4+ qui fonctionnent avec AoT
et SSR
GitHub
ngx-scroll-to
J'utiliserais un lien anker en HTML.
Il suffit de donner elemnt et id = "scrollXYZ" et d’envelopper le bouton dans
Exemple:
<a href="#scrollXYZ"><button>Example</button></a>
<div id="scrollXYZ"><h2>Scroll to this</h2></div>
J'essayais de faire cela dans Ionic 3 et en raison du fait que <Element>.offsetTop
retournait10
(le remplissage en haut de l'élément) au lieu de la distance au haut de la page (nombre inconnu beaucoup plus grand), je finis par utiliser simplement <Element>.scrollIntoView()
, ce qui a bien fonctionné pour moi.
Pour obtenir l’objet <Element>
j’ai utilisé document.getElementById()
, mais il existe de nombreuses autres options pour obtenir un descripteur à ce sujet.