如何在 Angular 中为响应式 div 设置动画?

Posted

技术标签:

【中文标题】如何在 Angular 中为响应式 div 设置动画?【英文标题】:How to animate responsive div in Angular? 【发布时间】:2021-02-05 14:08:44 【问题描述】:

我有以下动画:

@Component(
  ...
  animations: [
        trigger('fade', [
          transition(':enter', [
              style('width': '0' ),
              animate(300, style('width': '?')) // responsive width here what can I do?
          ]),
          transition(':leave', [
              animate(200, style('width': '0px'))
          ])
    
      ])
      ]
)

html代码:

<div class="detail" *ngIf="hasPost" [@fade]>
    <app-post-detail></app-post-detail>
</div>

所以,我通常想知道当宽度负责或高度未知时如何设置动画,因为在上面的示例中,具有 detail 类的 div 具有不同的宽度大小:

.detail 
    position: fixed;
    top: 0;
    right: 0;
    background-color: white;
    border-left: 1px solid white;
    width: 35%;
    height:100%;
    z-index: 20;


@media only screen and (max-width: 700px)
    .detail
        width: 50%;
    
    

我会在这里做什么?我试图将宽度设置为自动,但动画看起来很糟糕。我必须传递正确的宽度才能使动画正常工作,但如果不知道确切的宽度或不知道高度怎么办?

【问题讨论】:

【参考方案1】:

如下所示,用 * 代替宽度的数字

@Component(
  ...
  animations: [
        trigger('fade', [
          transition(':enter', [
              style('width': '*' ),
              animate(300, style('width': '*')) // responsive width here what can I do?
          ]),
          transition(':leave', [
              animate(200, style('width': '*'))
          ])
    
      ])
      ]
)

【讨论】:

您好,谢谢您的回答!我马上试试。 它确实有效,但我在使用 *ngIf 时有最后一个问题。在 div 展开到最大高度之前可以看到内容。如何防止这种行为? 是的,问你的问题 我从上面更新了我的评论。你知道如何解决这个问题吗?

以上是关于如何在 Angular 中为响应式 div 设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 Angular 中为 *ngIf 添加过渡效果?

如何在 Angular CLI V12 中为 div 制作可变 CSS 高度

响应式六边形网格

如何设置包装 div 的高度以防止响应式滑块/自动收录器后内容跳转?

Angular CDK - 在嵌套的可滚​​动 div 内滚动和拖动元素的问题

如何在 Angular 4 中为表格添加分页?