【问题标题】:Angular Ionic Capacitor | Why is Even a Simple Animation Laggy角离子电容器 |为什么即使是简单的动画也会滞后
【发布时间】:2022-04-21 03:01:04
【问题描述】:

我正在使用 Angular 构建一个简单的 Ionic Capacitor 应用程序。
该应用程序包含一些非常简单的动画,我惊讶地发现这些动画非常滞后:

在应用程序中,我有一个联系人列表。 When a contact is selected, the height of a div above the list is increased, and the list below is pushed down.请参考下面的截图。

这个动画是使用Ionic自己的animation library实现的:

await this.animationController
    .create()
    .iterations(1)
    .addElement(document.querySelectorAll('.selected-contacts'))
    .duration(150)
    .fromTo('height', '0, '160px').play();

简化的 HTML:

<div class="container">
   <div class="selected-contacts"><!-- some stuff here --></div>
   <div class="list"> 
      <cdk-virtual-scroll-viewport> 
        <!-- List here --> 
      </cdk-virtual-scroll-viewport> 
   </div>
</div>

播放这个动画就可以了,但它明显滞后,无论是在新 iPhone Pro 还是旧 Android 上(几乎相同的滞后量)。

问题:
一个简单的高度动画不应该在新 iPhone 上滞后,我做错了什么?难道底层操作系统只分配了一小部分资源给离子电容器应用程序?我在这里错过了什么?

免责声明:
我知道使用 translatetransform 使用的 CPU/GPU 更少,因为这里没有重写 DOM,但我仍然很难接受新 iPhone 无法在不延迟的情况下对高度变化进行动画处理。

【问题讨论】:

标签: angular ionic-framework animation css-animations capacitor


【解决方案1】:

动画高度属性在任何框架中都不是高性能的。高度要求浏览器需要重新布局整个页面,总是会导致卡顿。

更多详情请见CSS-Triggers

改用 Transforms/Translate3D 之类的东西来创建您正在寻找的效果。

编辑

添加指向past talk from Liam DeBeasi 的关于动画和性能的链接。

【讨论】:

  • 迁移到 Flutter,动画效果更好。 Ionic 对我的项目来说是一个糟糕的选择。仍然喜欢 Ionic,但它不适用于具有大量动画的大型应用程序。
  • 您介意将其标记为正确,因为这是您最初问题的原因吗?题外话,我认为 Ionic 对动画很好(因为我们在框架内部有一堆),只是动画需要使用正确的属性(变换和不透明度),而不是像高度/宽度这样会导致卡顿的东西.
猜你喜欢
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多