android - Angular Material 对话框动画在移动设备上非常慢

标签 android angular google-chrome animation angular-material2

在我运行棉花糖的 Xperia M5 上,angular material 对话框的打开动画在 chrome 中很糟糕,即使在 angular material's own website 上也是如此。 .有没有一种方法可以仅在移动设备上为对话框禁用动画?

我已经看过 this ,但它建议禁用所有动画,并且 CSS 解决方案不起作用。

附言我正在运行 Angular 5,所有内容都已更新为稳定版本。

最佳答案

这就是我在 Android 设备上禁用对话框动画所做的。

我使用 Ng2DeviceService 来确定它是否是一个 android 设备。可以很容易地修改以寻找其他条件。

这适用于 angular 5。不确定旧版本。

我在我的 app.module.ts 中完成了这一切

添加导入

import { AnimationDriver, ɵWebAnimationsDriver, ɵNoopAnimationDriver } from '@angular/animations/browser';

创建一个动画工厂。

 /**
 * Disable animations for dialogs on slow devices
 * @returns {WebAnimationsDriver}
 */
const animationFactory = () => {
  const deviceService = new Ng2DeviceService();
  const noop = AnimationDriver.NOOP;
  const driver = new ɵWebAnimationsDriver();
  const originalAnimate = driver.animate;

  const isAndroid = deviceService.os === 'android';

  let disableComplexAnimations = false;
  if (isAndroid) {
    disableComplexAnimations = true;
  }

  driver.animate = (element: any, keyframes: {
    [key: string]: string | number;
  }[], duration: number, delay: number, easing: string, previousPlayers?: any[]) => {
    if (disableComplexAnimations && element && element.nodeName === 'MAT-DIALOG-CONTAINER') {
      return noop.animate(element, keyframes, duration, delay, easing, previousPlayers);
    } else {
      return originalAnimate(element, keyframes, duration, delay, easing, previousPlayers);
    }
  };
  return driver;
};

注册在您的提供商列表中:

  providers: [
    { provide: AnimationDriver, useFactory: animationFactory },
  ],

关于android - Angular Material 对话框动画在移动设备上非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48409524/

相关文章:

android - 自定义 View 组件未显示在屏幕截图上

java - Android java enum 在一行中失败

PHP Web服务将数据插入数据库

Android:如何获取媒体播放器的错误并使用它?

google-chrome - 为什么 Instagram 会时不时地在浏览器上抛出 "Expected Dict got Mapping"错误?

Angular Material (2.0) AutoComplete Suggestions Panel 出现在 Bootstrap Modal 后面

angular - 将 .Net Core Angular 6 发布到 Azure 时出错

Angular 2如何从输入中删除粘贴的内容

macos - Mac : reloading document in Chrome or Firefox?

google-chrome - 适用于 Android 的 Chrome 上的 Web 推送通知 : Do I need a third party service like GCM or SNS?