angular - 没有 ngIf 的角度动画
问题描述
我正在尝试从CSS 动画切换到Angular 动画,但我无法找到如何在不显示所有元素的情况下为数组中的元素设置动画,并且只显示带有 * ngIf的选定元素。
动画在 TS 文件中定义如下:
@Component({
...
animations: [
trigger("carouselAnimation", [
// Next
transition(":increment", [
query(":enter", [
style({ opacity: 0, transform: "translateX(100%)" }),
animate(".3s", style({ opacity: 1, transform: "translateX(0)" }))
])
]),
// Previous
transition(":decrement", [
query(":enter", [
style({ opacity: 0, transform: "translateX(-100%)" }),
animate(".3s", style({ opacity: 1, transform: "translateX(0%)" }))
])
])
])
]
})
在 HTML 中,所选图像显示如下:
<div [@carouselAnimation]="counter">
<ng-container *ngFor="let img of images; let i=index">
<img [src]="img" style="height:200px; width:200px" *ngIf="i===counter"/>
</ng-container>
</div>
到目前为止一切正常,但我想做的是在不显示所有其他图像的情况下为图像设置动画,并使用 * ngIf隐藏它们并仅保留选定的图像:
<div [@carouselAnimation]="counter">
<img [src]="imgSrc" style="height:200px; width:200px">
</div>
但如果我这样做,动画就不再起作用了。
我还在Stackblitz创建了一个演示。
解决方案
你应该做的事情是ngFor
放弃并使用图像,如下所示:
<img [@carouselAnimation]="counter" [src]="images[counter]" style="height:200px; width:200px" />
您应该使用这种方法做的另一件事是将查询从更改:enter
为:self
以触发<img/>
元素上的动画
这是一个带有工作演示的StackBlitz (来自您的解决方案)。
这种方法的唯一问题(这也是您的*ngFor
解决方案的问题)是,如果图像加载速度比动画慢,用户最终会遇到错误的体验。
推荐阅读
- r - R:修改一个以来自多个先前行的数据为条件的变量
- rest - VSTS 使用 API 在排队时设置构建参数
- android - Android Webview SwipeRefreshLayout 不允许向下滚动
- qt5 - Gumstix Overo SSD1306 OLED
- mysql - 仅检索单个记录的 Node.js MySQL 代码有什么问题
- elasticsearch - Elasticsearch hits.total 与 OR 不同
- r - 在 ggduo 散点图矩阵中显示相关指数
- angular - nouislider angular 2 格式工具提示
- android - 无法停止从后台服务启动的蓝牙适配器
- javascript - 根据对象中键的值对数组中的对象进行分组