Ce que je veux réaliser est un clic sur et faire un défilement lisse vers le bas/zone div spécifiée que je définis avec hashtag juste comme je pense que cela devrait être comme ça.
voici l'exemple en direct de l'exemple w3school écrit pour JQuery: https://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_eff_animate_smoothscroll
Ce que je fais est un coup d’oeil de cette réponse: Routage Angular2 avec Hashtag vers une ancre de page
mais je ne comprends pas vraiment la réponse, la réponse est la suivante:
cette partie est une partie HTML:
<a [routerLink]="['somepath']" fragment="Test">Jump to 'Test' anchor </a>
et au-dessous de ceci, le router.navigate est où devrais-je mettre le code? composant.ts non? mais comment puis-je accéder à cette fonction? dois-je implémenter (cliquer)?
this._router.navigate( ['/somepath', id ], {fragment: 'test'});
et au-dessous, je l’ai, qu’il devrait écrire dans mon composant.ts:
** Add Below code to your component to scroll**
import {ActivatedRoute} from '@angular/router'; // <-- do not forget to import
private fragment: string;
constructor(private route: ActivatedRoute { }
ngOnInit() {
this.route.fragment.subscribe(fragment => { this.fragment = fragment; });
}
ngAfterViewInit(): void {
try {
document.querySelector('#' + this.fragment).scrollIntoView();
} catch (e) { }
}
que signifie le "chemin"? Je devrais ajouter une route dans mes routes.ts non? d'habitude, j'ajoute un nouveau chemin ici par exemple comme ceci:
export const routes: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full' },
{ path: 'product', redirectTo: '/product' },
...homeRoutes,
...productRoutes
];
quelqu'un peut-il me fournir un exemple complet de code HTML, de routes et de composants?
d'après ce que j'ai lu et ce que je cherche, ce sera un enfer de code pour juste un défilement lisse, ce n'est pas simplement comme JQuery, je pense, alors j'ai décidé d'utiliser ce plugin qui fonctionne parfaitement: https: // www.npmjs.com/package/@nicky-lenaers/ngx-scroll-to
sentez-vous libre de l'utiliser
Je cherchais une solution similaire et j'ai essayé d'utiliser le paquet ngx-scroll-to et j'ai constaté qu'il ne fonctionnait pas dans la dernière version de angular (angular 6+) alors décidé de chercher une autre option et de trouver une solution utilisant le navigateur nativescrollIntoView
, ce qui semble être la meilleure solution à ce jour
Code HTML :
<button (click)="scrollToElement(target)"></button>
<div #target>Your target</div>
Code Ts:
scrollToElement($element): void {
console.log($element);
$element.scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"});
}
Vous pouvez simplement le faire dans votre composant.
const element = document.querySelector("#destination")
if (element) element.scrollIntoView({ behavior: 'smooth', block: 'start' })
Réf.: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
html {
scroll-behavior: smooth;
}
Cela fonctionne même après la navigation ou le rechargement de page.
Veuillez noter que cela ne fonctionne pas dans IE, Edge ou Safari.
Essayez de supprimer les crochets:
class="startScroll" scrollTo="'#firstDiv'" scrollBoxID="'#scrollBox'"
Je viens d'utiliser ngx-page-scroll . Cela peut être aussi simple que:
<a class="nav-link nav-item-text" pageScroll href="#categories">Categorias</a>
....
<section id="categories">
Visitez la page du paquet pour plus d'informations: https://www.npmjs.com/package/ngx-page-scroll
Il fournit également des mécanismes permettant de configurer le processus de défilement ou le comportement personnalisé d'implémentation d'événement via un service contrôlant le défilement à partir du contrôleur du composant.