我正在使用Angular Materials的mat-tree(https://material.angular.io/components/tree/overview)。在扩展父树节点时,我想为子树节点的外观和消失设置动画。 这是我希望动画效果如何的一个示例:
我知道Angular提供了一种用于仿真的功能,但是我仍然找不到如何对mat-tree进行动画处理。
是否可以对Angular Material的垫树进行动画处理?还是如果我想要那种动画,我是否不得不编写自己的树菜单?
答案 0 :(得分:5)
按照接受的答案中的方法通过垂直滑动子节点的动画来完成此操作,您可以使用嵌套树。 Stackblitz
将动画添加到组件中
@Component({
selector: 'tree-nested-overview-example',
templateUrl: 'tree-nested-overview-example.html',
styleUrls: ['tree-nested-overview-example.css'],
animations:[
trigger('slideVertical', [
state(
'*',
style({
height: 0
})
),
state(
'show',
style({
height: '*'
})
),
transition('* => *', [animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')])
])
]
})
将动画应用于包含子节点的元素:
<mat-nested-tree-node *matTreeNodeDef="let node; when: hasChild">
<li>
<div class="mat-tree-node">
<button mat-icon-button matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
{{node.name}}
</div>
<ul [@slideVertical]="treeControl.isExpanded(node) ? 'show' : null">
<ng-container matTreeNodeOutlet></ng-container>
</ul>
</li>
</mat-nested-tree-node>
隐藏元素上的溢出
.example-tree ul {
overflow: hidden;
}
答案 1 :(得分:2)
它只是将动画添加到标签mat-tree-node 您的动画可以像
animations: [
trigger('simpleFade', [
transition(':enter', [
style({ opacity:0 }),
animate(350)
])])]
但是,如果您不想为主树设置动画,则必须使用诸如
animations: [
trigger('simpleFade', [
transition('*=>1', [
style({ opacity:0 }),
animate(350)
])])]
然后您使用[@simpleFade]="node.level?1:0"
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<!--see that you only want the animation when becomes 1, so check the level-->
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding
[@simpleFade]="node.level?1:0">
<button mat-icon-button disabled></button>
{{node.name}}
</mat-tree-node>
<!--see that you only want the animation when becomes 1, so check the level-->
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding
[@simpleFade]="node.level?1:0">
<button mat-icon-button matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
{{node.name}}
</mat-tree-node>
</mat-tree>
请参见stackblitz