Cela est censé être très simple, j'ai un certain élément dans le template de mon composant que je veux faire défiler en douceur après le chargement de la page s'il est passé dans l'url comme un fragment comme ceci : '../cheminDuComposant#someElement'
J'ai essayé de le faire en ajoutant un #someElement
à l'élément dans le html et j'ai ensuite utilisé
@ViewChild('someElement') someElement: ElementRef
puis j'ai appelé le ngAfterViewInit()
comme ceci :
ngAfterViewInit() {
this.route.fragment.subscribe((fragment: string) => {
if (fragment === 'someElement') {
this.someElement.nativeElement.scrollIntoView({behavior: 'smooth', block: 'start'});
}
});
}
Mais rien ne se passe, cela fonctionne parfaitement si j'appelle le scrollIntoView()
après un court laps de temps en utilisant setTimeOut()
comme ceci :
ngAfterViewInit() {
this.route.fragment.subscribe((fragment: string) => {
if (fragment === 'someElement') {
setTimeout(() => {
this.servicesSection.nativeElement.scrollIntoView({behavior: 'smooth', block: 'start'});
}, 1000)
}
});
}
Évidemment, ce n'est pas correct, mais cela m'a amené à la conclusion que mon problème réside dans le moment où l'événement scrollIntoView() est déclenché.
J'ai lu de nombreuses discussions sur de nombreux sites et je n'ai pas encore réussi à le faire fonctionner correctement, donc j'ai pensé que ce serait une bonne idée de poser une question ici.