Ich möchte in der Lage sein, zu einem Ziel zu scrollen, wenn eine Taste gedrückt wird. Ich habe so etwas gedacht.
<button (click)="scroll(#target)">Button</button>
Und in meiner component.ts
eine Methode wie.
scroll(element) {
window.scrollTo(element.yPosition)
}
Ich weiß, dass der obige Code nicht gültig ist, sondern nur um zu zeigen, was ich gedacht habe. Ich habe gerade angefangen, Angular 4 ohne vorherige Erfahrung mit Angular zu lernen. Ich habe nach so etwas gesucht, aber alle Beispiele befinden sich in AngularJs, was sich stark von Angular 4 unterscheidet
javascript
html
angular
typescript
BuZZ-dEE
quelle
quelle
Antworten:
Sie könnten es so machen:
und dann in Ihrer Komponente:
Bearbeiten: Ich sehe Kommentare, die besagen, dass dies nicht mehr funktioniert, da das Element undefiniert ist. Ich habe ein StackBlitz-Beispiel in Angular 7 erstellt und es funktioniert immer noch. Kann jemand bitte ein Beispiel geben, wo es nicht funktioniert?
quelle
scroll
Funktion der Komponente übergeben möchten . Beachten Sie, dass das Klickereignis aufgerufen wirdscroll(target)
. Wenn Sie von innerhalb der Komponente auf das Element zugreifen möchten, ohne das Element übergeben zu müssen, können Sie es verwenden@ViewChild
.id="target"
stattdessen verwendet habe#target
und es gab mir "el ist undefinierter Fehler"!#target
in einem befindet*ngIf
, aber es sollte funktionieren, wenn Sie die@ViewChild
Methode im Link von @abbastecEs gibt tatsächlich eine reine Javascript-Methode, um dies ohne Verwendung von
setTimeout
oderrequestAnimationFrame
oder jQuery zu erreichen.Kurz gesagt, suchen Sie das Element in der scrollView, zu dem Sie scrollen möchten, und verwenden Sie es
scrollIntoView
.el.scrollIntoView({behavior:"smooth"});
Hier ist ein Plunkr .
quelle
Hier ist, wie ich es mit Angular 4 gemacht habe.
Vorlage
Fügen Sie diese Funktion der Komponente hinzu.
quelle
In Angular 7 funktioniert perfekt
HTML
In Komponente
quelle
#target
es nach der Schaltfläche definiert ist. Dies ist relevant, wenn Sie beispielsweise einen schwebenden Header haben ...Jon hat die richtige Antwort und das funktioniert in meinen eckigen 5 und 6 Projekten.
Wenn ich klicken wollte, um reibungslos von der Navigationsleiste zur Fußzeile zu scrollen:
Da ich von der Fußzeile zurück zur Kopfzeile scrollen wollte, habe ich einen Dienst erstellt, in dem sich diese Funktion befindet, und ihn in die Komponenten der Navigationsleiste und der Fußzeile eingefügt und bei Bedarf in der Kopf- oder Fußzeile übergeben. Denken Sie daran, den Komponentendeklarationen tatsächlich die verwendeten Klassennamen zu geben:
quelle
Eine andere Möglichkeit, dies in Angular zu tun:
Markup:
ViewChild()
Eigenschaft hinzufügen :Scrollen Sie mit der
scrollIntoView()
Funktion an eine beliebige Stelle innerhalb der Komponente :quelle
Sie können zu einem beliebigen Element in Ihrer Ansicht scrollen, indem Sie den folgenden Codeblock verwenden. Beachten Sie, dass sich das Ziel (elementref id ) auf einem beliebigen gültigen HTML-Tag befinden kann.
In der Ansicht (HTML-Datei)
auf der
.ts
Datei,quelle
Sie können dies erreichen, indem Sie den Verweis auf ein eckiges DOM-Element wie folgt verwenden:
Hier ist das Beispiel in Stackblitz
die Komponentenvorlage:
quelle
In Angular können Sie verwenden
ViewChild
undElementRef
: Ihrem HTML-Element eine Referenz gebenund in Ihrer Komponente:
Sie können verwenden
this.myDivRef.nativeElement
, um zu Ihrem Element zu gelangenquelle
Ich habe so etwas wie das, was Sie fragen, getan, indem ich jQuery verwendet habe, um das Element (z. B.
document.getElementById(...)
) zu finden, und den.focus()
Aufruf verwendet habe.quelle
Sie können dies mit jquery tun:
ts Code:
HTML Quelltext :
Wenden Sie dies auf Elemente an, die Sie scrollen möchten:
Hier ist ein Stackblitz-Beispiel.
quelle