【问题标题】:How to switch animation from Angular to css如何将动画从 Angular 切换到 css
【发布时间】:2021-10-10 13:51:41
【问题描述】:

我有一个使用@angular/animation 完美地工作的淡入/淡出动画,但我需要将此动画传递给 css 并消除@angular/animation 的这种依赖性

我的动画(我只是在我的div 中传递了[@fadeInOut] 属性并且它可以工作):

animations: [
    trigger('fadeInOut', [
      state(
        'void',
        style({
          opacity: 0
        })
      ),
      transition('void <=> *', animate(300))
    ])
  ]

我尝试在 css 中执行此操作,但没有成功:

.fadeinout{
  animation: fade 0.3s linear forwards;
}

@keyframes icon-fade-in-out {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }

}

【问题讨论】:

  • 请你提供一个完整的工作 sn-p,我们可以尝试,因为我无法看到淡入/淡出效果不起作用 - 对我来说似乎很好,但可能是你在和我看到的效果不一样。您希望动画永远运行还是运行多个周期?
  • 嗨。我希望它在元素进入屏幕时淡入并在元素离开时淡出(当我单击关闭或当它保持一段时间我设置时)。我修复了问题的css。角度动画效果很好,但 css 只是淡入
  • 您可能还需要 Javascript,例如 IntersectionObserver。

标签: css angular animation css-animations


【解决方案1】:

您应该使用关键帧和 webkit-keyframes 以防浏览器不支持它。我喜欢在我的上创建 20 个步骤,因为我认为它看起来更干净,并且在淡入时不会那么跳跃。

.fade-in {
    -webkit-animation: fade-in .8s steps(20, end) both;
            animation: fade-in .8s steps(20, end) both;
}

@-webkit-keyframes fade-in {
    0% {
      opacity: 0;
    }
    100% {
      opacity: 1;
    }
  }
@keyframes fade-in {
    0% {
      opacity: 0;
    }
    100% {
      opacity: 1;
    }
  }

你可以在这里阅读:

https://css-tricks.com/snippets/css/keyframe-animation-syntax/

在您的函数中,您可以使用 renderer2 - 作为对您的评论的回应,我们就是这样做的并且它有效。我本可以合并这些类,但我们单独测试每个类,以确保它们及时有序地注入到 Dom 中。

 const loading= document.getElementById('loading');
      const signinElement = document.getElementById('signinelement');

    this.renderer.removeClass(signinElement, 'show');
    this.renderer.removeClass(signinElement, 'fade-in');
    this.renderer.removeClass(loading, 'hidden');

    this.renderer.addClass(signinElement, 'hidden');
    this.renderer.addClass(signinElement, 'fade-out');
    this.renderer.addClass(loading, 'show');

    this.renderer.addClass(loading, 'fade-in');
    setTimeout(()=>{
      


  // this.renderer.addClass(signinElement, 'show');
  // this.renderer.addClass(signinElement, 'fade-in');
 
      setTimeout(()=>{
        this.signin.googleSignin();
      }, 500)
     

    }, 500)

【讨论】:

  • 嗨,克里斯,谢谢你的答案。这适用于淡入,但不适用于淡出。当我单击以关闭元素或当元素在我确定的屏幕上停留时间时,它会在没有动画的情况下关闭。它与我放置的 css 具有相同的行为
  • 我们也经历过这个。我最终使用渲染器 2 并通过函数附加类,然后将其清除。
  • 添加了渲染器 2 打字稿,因此您可以看到我们做到了,希望对您有所帮助。我也不是角度动画的粉丝。
  • 我们还通过超时强制一整秒来查看动画 - 您会看到我们的动画只有 0.8 秒
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-21
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
相关资源
最近更新 更多