Di recente ho sviluppato il seguente componente Angular 2 Read More. Ciò che fa questo componente è collassare ed espandere lunghi blocchi di testo con i collegamenti "Leggi di più" e "Leggi di meno". Non sulla base del numero di caratteri ma sulla base dell'altezza massima specificata.Angolare 2 Animazione slide up e down
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;
}
}
}
e utilizzato come:
<read-more [text]="details" [maxHeight]="250"></read-more>
Il componente funziona bene. Ora ho bisogno di aggiungere alcune animazioni slide up/down al componente in modo che quando si fa clic sul link Leggi altro, i contenuti scorrono verso il basso e quando si fa clic su Leggi di meno, i contenuti scorrono all'altezza massima specificata.
Qualcuno può guidare come ottenere ciò?
[Vedi il mio rispondi qui] (http://stackoverflow.com/a/37843393/1375316). L'esempio è praticamente esattamente quello che stai cercando di fare. – threeve
Grazie mille, in realtà ho provato ad aggiungere le seguenti informazioni di stile al mio componente precedente, ma questo non sembra funzionare. stili: [' div.collapsed { overflow: nascosto; } ', ' div { transizione: altezza 500ms facilità; } '] –
Se funziona per te, puoi validare la mia soluzione per favore? – Julien