Angulaire 2 faites Glisser vers le Haut et vers le Bas de l'Animation
J'ai récemment construit à la suite Angulaire 2 Lire Plus de composant. Ce que ce composant n'est réduire et développer les longs blocs de texte avec "Lire la suite" et "Lire Moins" liens de. Non pas sur la base du nombre de caractères, mais sur la base de la hauteur max.
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;
}
}
}
Et utilisé comme:
<read-more [text]="details" [maxHeight]="250"></read-more>
Le composant fonctionne bien. Maintenant, j'ai besoin d'ajouter un peu de glisser vers le haut/vers le bas de l'animation dans le composant de sorte que lors de la Lecture Plus le lien est cliqué sur le contenu de glisser vers le bas et lors de la Lecture moins est cliqué, le contenu de la diapositive jusqu'à spécifiées hauteur max.
Quelqu'un peut s'il vous plaît guide comment faire?
Merci threeve, j'ai effectivement essayé d'ajouter le style ci-dessous les infos de mon ci-dessus, mais cela ne semble pas fonctionner. styles: [` div.s'est effondré { overflow: hidden; }
,
div { transition: hauteur 500ms l'aise; }`]Si cela fonctionne pour vous, pouvez-vous valide ma solution s'il vous plaît?
La solution ne semble fonctionner que dans un sens - faites glisser vers le haut.
OriginalL'auteur Naveed Ahmed | 2016-06-15
Vous devez vous connecter pour publier un commentaire.
Angulaire de la documentation officielle : https://angular.io/guide/animations#automatic-property-calculation
Cette solution glisser vers le haut (effondrement / masquer) seulement ? Et pas vers le bas (développer / spectacle) ?
OriginalL'auteur Julien
Ma Solution avec
:enter
,:leave
et*ngIf
:Modèle:
Malheureusement, j'ai dû intégrer cette correction (slideOut):
https://github.com/angular/angular/issues/15798
OriginalL'auteur Felix
Threeve réponse est bonne - le seul problème est que la transition CSS ne fonctionne pas avec "auto". Donc, vous avez besoin pour capturer l'auto de hauteur dans la ngAfterViewInit fonction et l'enregistrer comme une chaîne de caractères. Notez aussi l'utilisation de la fonction setTimeout pour arrêter le "unidirectionnel-flux de données-erreur de violation d'" qui peuvent se produire.
OriginalL'auteur Ron Brill