如何使用角度 BrowserAnimationsModule 为网格框更改设置动画?

Posted

技术标签:

【中文标题】如何使用角度 BrowserAnimationsModule 为网格框更改设置动画?【英文标题】:How can I animate grid box change with angular BrowserAnimationsModule? 【发布时间】:2021-04-13 00:44:13 【问题描述】:

为了描述我的问题,我将从根源开始解释我想要做什么,以及为什么我决定为此使用 Grid Box,让我们从两个线框开始: p>

我的布局是由两个容器组成的;身体和侧边栏。不要以为这是整个网站,这只是一个组件。

侧边栏包含两个元素,笔记和聊天。

笔记和聊天元素可以是小尺寸的,但一旦小尺寸,左侧正文容器的第二部分会变宽,并占据侧边栏在其底部空间的位置,如在下面的例子:

所以经过一番研究后,我找不到任何其他解决方案,除了需要变宽的第二数据部分有 2 个不同的组件,或者只使用网格框,但是,我必须为侧栏和数据的第二部分,其宽度发生了变化。

我用 Grid Box 创建了一个有角度的 POC 示例,可以在没有动画的情况下实现我所需要的:

https://stackblitz.com/edit/angular-ivy-7tucsx?file=src/app/app.component.html

是否可以像示例 POC 中那样通过将 .closed 类添加到我的 .container 来使用网格框实现此动画?

【问题讨论】:

【参考方案1】:

有一个纯 CSS 解决方案可以帮助您。

在sn-p中,将容器悬停,使底部的div展开。

诀窍是使用 3 列网格,以及一个可增长/缩小的辅助元素:

在生产中,trick 元素的高度为 0,并且是不可见的。

.container 
    display: grid;
    border: solid 1px red;
    grid-template-columns: 1fr auto auto;
    grid-template-rows: 100px 100px 10px;
    transition: all 3s;
    width: 500px;



#right 
    background-color: yellow;
    width: 200px;
    grid-column: 2 / span 2;


#bottom 
    background-color: lightgreen;
    grid-column: span 2;


#trick 
    background-color: tomato;
    grid-column: 2 / 3;
    width: 0px;
    transition: width 3s;


.container:hover #trick 
    width: 200px;
<div class="container">
    <div id="left">L</div>
    <div id="right">R</div>
    <div id="bottom">B</div>
    <div id="trick">T</div>
</div>
 

【讨论】:

【参考方案2】:

这个想法是使用 angular 提供的动画。所以你需要在app.module.ts中添加以下内容:

imports: 
[
     BrowserAnimationsModule,
     BrowserModule
]

将动画添加到 @component 装饰:

animations: [
   trigger('<animationName>' [<definitions>])
]    

html中,将动画应用到所需的div:

<div [<@animationName>] = '<state-definitions-name>'></div>

[更新]

以上是抽象代码。有关详细代码,我附上我的 stackblitz 代码:https://stackblitz.com/edit/angular-ivy-zs1x59

根据@component's animations的要求分别改变高、宽

【讨论】:

以上是关于如何使用角度 BrowserAnimationsModule 为网格框更改设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何在角度组件中使用离子组件

如何使用if语句更改角度样式属性[重复]

如何避免使用角度材料从角度 2 中的 mat-table 传输相同的行

如何在角度材料中使用输入类型文件

我如何使用角度路由重定向用户

如何以角度处理会话到期?