Je veux pouvoir faire défiler jusqu'à une cible lorsqu'un bouton est enfoncé. Je pensais à quelque chose comme ça.
<button (click)="scroll(#target)">Button</button>
Et dans ma component.ts
méthode comme.
scroll(element) {
window.scrollTo(element.yPosition)
}
Je sais que le code ci-dessus n'est pas valide mais juste pour montrer ce que je pensais. Je viens de commencer à apprendre Angular 4 sans aucune expérience préalable d'Angular. J'ai cherché quelque chose comme ça mais tous les exemples sont dans AngularJs qui diffère beaucoup d'Angular 4
javascript
html
angular
typescript
BuZZ-dEE
la source
la source
Réponses:
Vous pouvez le faire comme ceci:
puis dans votre composant:
Edit: Je vois des commentaires indiquant que cela ne fonctionne plus car l'élément n'est pas défini. J'ai créé un exemple StackBlitz dans Angular 7 et cela fonctionne toujours. Quelqu'un peut-il donner un exemple où cela ne fonctionne pas?
la source
scroll
fonction sur le composant. Notez que l'événement de clic appellescroll(target)
. Si vous souhaitez accéder à l'élément depuis l'intérieur du composant sans avoir à passer l'élément, vous pouvez utiliser@ViewChild
.id="target"
place de#target
et cela m'a donné "el est une erreur indéfinie"!#target
est à l'intérieur d'un*ngIf
, mais cela devrait fonctionner si vous utilisez la@ViewChild
méthode dans le lien de @abbastecIl existe en fait un moyen purement javascript pour y parvenir sans utiliser
setTimeout
ourequestAnimationFrame
ou jQuery.En bref, recherchez l'élément dans le scrollView vers lequel vous souhaitez faire défiler et utilisez
scrollIntoView
.el.scrollIntoView({behavior:"smooth"});
Voici un plunkr .
la source
Voici comment je l'ai fait en utilisant Angular 4.
Modèle
ajoutez cette fonction au composant.
la source
Dans Angular 7 fonctionne parfaitement
HTML
Dans le composant
la source
#target
est défini après le bouton, ce qui est pertinent si vous avez un en-tête flottant par exemple ...Jon a la bonne réponse et cela fonctionne dans mes projets angulaires 5 et 6.
Si je voulais cliquer pour faire défiler en douceur de la barre de navigation au pied de page:
Parce que je voulais revenir à l'en-tête du pied de page, j'ai créé un service dans lequel se trouve cette fonction et je l'ai injecté dans les composants de la barre de navigation et du pied de page et passé dans `` en-tête '' ou `` pied de page '' si nécessaire. n'oubliez pas de donner aux déclarations des composants les noms de classe utilisés:
la source
Une autre façon de le faire dans Angular:
Balisage:
Ajouter une
ViewChild()
propriété:Faites défiler n'importe où dans le composant à l'aide de la
scrollIntoView()
fonction:la source
Vous pouvez faire défiler jusqu'à n'importe quelle référence d'élément sur votre vue en utilisant le bloc de code ci-dessous. Notez que la cible (elementref id ) peut se trouver sur n'importe quelle balise HTML valide.
Sur la vue (fichier html)
sur le
.ts
dossier,la source
Vous pouvez y parvenir en utilisant la référence à un élément DOM angulaire comme suit:
Voici l'exemple dans stackblitz
le modèle de composant:
la source
Dans Angular, vous pouvez utiliser
ViewChild
etElementRef
: donner à votre élément HTML une référenceet à l'intérieur de votre composant:
vous pouvez utiliser
this.myDivRef.nativeElement
pour accéder à votre élémentla source
J'ai fait quelque chose comme ce que vous demandez simplement en utilisant jQuery pour trouver l'élément (tel que
document.getElementById(...)
) et en utilisant l'.focus()
appel.la source
Vous pouvez le faire en utilisant jquery:
code ts:
Code HTML :
Appliquez ceci sur les éléments que vous souhaitez faire défiler:
Voici un exemple de stackblitz.
la source