Eto*_*oon 5 tree angular-material angular angular-animations
我正在使用来自 Angular Materials 的mat-tree ( https://material.angular.io/components/tree/overview )。在扩展父树节点时,我想为子树节点的出现和消失设置动画。这是我希望动画如何的一个例子:

我知道 Angular 提供了反动画功能,但我还没有找到如何为 mat-tree 设置动画。
是否可以为 Angular Material 的 mat-tree 设置动画?或者如果我想要那种动画,我是否被迫编写自己的树形菜单?
按照已接受的答案中的方法通过垂直滑入/滑出子节点的动画来执行此操作,您可以使用嵌套树。闪电战
给组件添加动画:
@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)')])
])
]
})
Run Code Online (Sandbox Code Playgroud)
将动画应用到包含子节点的元素:
<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>
Run Code Online (Sandbox Code Playgroud)
隐藏元素上的溢出:
.example-tree ul {
overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)
它只是将动画添加到标签 mat-tree-node 你的动画可以像
animations: [
trigger('simpleFade', [
transition(':enter', [
style({ opacity:0 }),
animate(350)
])])]
Run Code Online (Sandbox Code Playgroud)
但是如果你不想为主树设置动画,你必须使用一些像
animations: [
trigger('simpleFade', [
transition('*=>1', [
style({ opacity:0 }),
animate(350)
])])]
Run Code Online (Sandbox Code Playgroud)
然后你使用 [@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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2398 次 |
| 最近记录: |