Angular/CSS - 动态添加新元素时动画内容的移动

Posted

技术标签:

【中文标题】Angular/CSS - 动态添加新元素时动画内容的移动【英文标题】:Angular/CSS - Animate shifting of content when new elements are dynamically added 【发布时间】:2016-07-09 19:36:04 【问题描述】:

角动画菜鸟在这里。

我可以使用ngAnimate 成功地将内容动画化到页面上。但是,当我的新内容滑入时,它下面的所有内容都会跳到新位置。同样,当新内容被删除时,以下内容会跳回。是否有角度的方式来为以下内容的新位置设置动画?

<button class="button" ng-if="typingResponse">
    Submit!
</button>
<div class="response-section">
  <label class="item item-input item-stacked-label">
    <span class="input-label">Response</span>
    <textarea></textarea>
  </label>
</div>


.button.ng-enter 
  -webkit-animate: slideInLeft 1s;
  animation: slideInLeft 1s;

.button.ng-leave 
  -webkit-animate: slideOutLeft 1s;
  animation: slideOutLeft 1s;

【问题讨论】:

这是一个不错的 gif 动画,不幸的是,如果没有真正的 html+css 或更好的东西,它就毫无价值 - 一个工作示例 创建这个空间是因为在最终位置有一个元素在等待动画结束。当它做相反的事情时,它会使那个元素消失。您需要先为盒子设置动画,然后在动画完成后,开始您的动画。你的第二个动画需要做相反的事情。 @AlonEitan 添加了部分代码 @klauskpm 你对如何做到这一点有什么建议吗?如果我想首先为“响应”框设置动画,我需要知道传入的“提交”按钮的高度。但是,当我想要执行此动画时,按钮尚未在 DOM 上。 好的。我已经考虑了第二个想法,也许为您提供了一些更简单的解决方案。创建一个div 或您选择的任何元素,并将其高度设置为在CSS 上有一个transition。内容将是提交按钮,因此在创建时,外部框(您创建的 div)将执行动画以适应其内容,或者应该是这样。 【参考方案1】:

@klauskpm 让我大部分时间到达那里,而this blog post 是缺失的部分。

解决办法:

    将按钮放在 div 内 设置div的初始max-height0px 在 div 的 max-height 属性上指定一个过渡 要显示按钮时,增加div的max-height属性

更新代码:

<div class="button-container" ng-class="'has-button': typingResponse">
  <button class="button" ng-if="typingResponse">
    Submit
  </button>
</div>
<div class="response-section">
  <label class="item item-input item-stacked-label">
    <span class="input-label">Response</span>
    <textarea></textarea>
  </label>
</div>

.button.ng-enter 
  -webkit-animate: slideInLeft $slide-dur;
  animation: slideInLeft $slide-dur;

.button.ng-leave 
  -webkit-animate: slideOutLeft $slide-dur;
  animation: slideOutLeft $slide-dur;



.button-container 
  max-height: 0px;
  transition: max-height $slide-dur linear;
  -webkit-transition: max-height $slide-dur linear;


.button-container.has-button 
  max-height: 100px;

【讨论】:

以上是关于Angular/CSS - 动态添加新元素时动画内容的移动的主要内容,如果未能解决你的问题,请参考以下文章

css3 过渡和动画

新渲染元素的动画,但不在页面加载时

Jquery 动态交换两个div位置并添加Css动画效果

YYEVA动效播放器--动态元素完美呈现新方案

如何将 DOM 元素附加到动态新添加的 DOM 元素

vuejs 为网格内的列表项设置动画