Winkel-2 Slide Up und Down Animation
Ich habe vor kurzem gebaut, die folgenden Eckig 2 Mehr Lesen Komponente. Was diese Komponente tut, ist das reduzieren und erweitern Sie lange Textblöcke mit "Lesen Sie mehr" und "Weniger Lesen" - links. Nicht auf der basis von die Anzahl der Zeichen, jedoch auf der Grundlage der angegebenen max Höhe.
import { Component, Input, ElementRef, AfterViewInit } from '@angular/core';
@Component({
selector: 'read-more',
template: `
<div [innerHTML]="text" [class.collapsed]="isCollapsed" [style.height]="isCollapsed ? maxHeight+'px' : 'auto'">
</div>
<a *ngIf="isCollapsable" (click)="isCollapsed =! isCollapsed">Read {{isCollapsed? 'more':'less'}}</a>
`,
styles: [`
div.collapsed {
overflow: hidden;
}
`]
})
export class ReadMoreComponent implements AfterViewInit {
//the text that need to be put in the container
@Input() text: string;
//maximum height of the container
@Input() maxHeight: number = 100;
//set these to false to get the height of the expended container
public isCollapsed: boolean = false;
public isCollapsable: boolean = false;
constructor(private elementRef: ElementRef) {
}
ngAfterViewInit() {
let currentHeight = this.elementRef.nativeElement.getElementsByTagName('div')[0].offsetHeight;
//collapsable only if the contents make container exceed the max height
if (currentHeight > this.maxHeight) {
this.isCollapsed = true;
this.isCollapsable = true;
}
}
}
Und verwendet wie:
<read-more [text]="details" [maxHeight]="250"></read-more>
Die Komponente funktioniert gut. Jetzt muss ich hinzufügen, dass einige slide up/down-animation, um die Komponente so, dass wenn Mehr Lesen link geklickt wird, den Inhalt nach unten schieben und beim Lesen weniger geklickt wird, den Inhalt-dia bis zur angegebenen max Höhe.
Kann mir jemand bitte eine Anleitung wie dies zu erreichen?
- Siehe meine Antwort hier. Das Beispiel ist so ziemlich genau das, was Sie zu tun versuchen.
- Danke threeve, habe ich eigentlich versucht, indem die unten Stil info zu meinem obigen Komponente, aber das scheint nicht zu funktionieren. styles: [` div.zusammengebrochen { overflow: hidden; }
,
div { transition: Höhe 500ms ease; }`] - Wenn es für Sie arbeitet, können Sie gültige meine Lösung bitte?
- Die Lösung scheint zu funktionieren nur in einer Richtung - oben schieben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kantige offizielle Dokumentation : https://angular.io/guide/animations#automatic-property-calculation
Meine Lösung mit
:enter
,:leave
und*ngIf
:Vorlage:
Leider musste ich übernehmen dieses Update ist auch (für slideOut):
https://github.com/angular/angular/issues/15798
Threeve s Antwort ist richtig - das problem ist nur, dass die CSS-transition funktioniert nicht mit 'auto'. So müssen Sie erfassen das auto in Höhe der ngAfterViewInit-Funktion und speichern Sie es als string. Beachten Sie auch die Verwendung der setTimeout-Funktion zu stoppen, die "einseitig-data-flow-Verletzung-Fehler' auftreten können.