ios - Angular :enter animation does not run at IOS device

标签 ios angular ionic-framework

我有一个 ionic 4 应用程序,我创建了一个 :enter 和 :leave 动画,当用户在屏幕上滑动时应该运行...它在浏览器 chrome 上运行得很好,但是当我在 IOS 中部署应用程序时,第一个动画(当加载页面)有效,但刷第一张卡后,第二张卡不会出现。通过 safari 和检查器,我意识到该卡已渲染但不可见,不知何故下一张卡的动画类没有被删除。

当我在检查器中手动删除以下类时,动画会运行...问题是我无法手动删除它,它应该以与在 chrome 中发生的方式相同的方式运行。

animation: gen_css_kf_44 300ms linear 0ms 1 normal forwards running;
opacity: 1;
transform: translateX(0px);
position: absolute;

这是我的 html:

<ion-grid
            *ngIf="!changingFeed"
            @slideLeftEnterSelf @slideLeftLeaveSelf
            class="feed-box pos-relative" (swipeleft)="changeFeed()">
          <div class="white-bg pos-relative">
              {{ feeds[feedIndex].text }}
          </div>
        </div>
    </ion-grid>

我的TS文件,它制作了替换内容的逻辑:

feeds = [
    {
        author: 'person',
        desc: 'desc',
        type: 'meeting',
        date: new Date(234243243244233),
        text: 'test test test test'
    }
]

changeFeed() {
        this.changingFeed = true;
        setTimeout( () => {
            if (this.feedIndex === this.feeds.length - 1) {
                this.feedIndex = 0;
            } else {
                this.feedIndex++;
            }
            this.changingFeed = false;
        }, 350);
    }

这是我正在使用的动画,并且在 Chrome 上完美运行:

    export const slideLeftEnterSelf = trigger('slideLeftEnterSelf', [
    transition(':enter', [
        query(':self', [style({ opacity: 0, transform: 'translateX(150%)', position: 'absolute' })], { optional: true }),
        query(':self', [animate('0.3s', style({ opacity: 1, transform: 'translateX(0)' }))], { optional: true })
    ])
]);

export const slideLeftLeaveSelf = trigger('slideLeftLeaveSelf', [
    transition(':leave', [
        query(':self', [style({ opacity: 1, transform: 'translateX(0)' })], { optional: true }),
        query(':self', [animate('0.2s', style({ opacity: 0, transform: 'translateX(-100%)' }))], { optional: true })
    ])
]);

我正在测试的设备是 Iphone 8 plus,运行 iOS 12.3.2,这些是我的版本:

"dependencies": {
    "@angular/animations": "^8.0.2",
    "@angular/core": "^7.2.2",
    "@ionic/angular": "^4.1.0",
    "@types/hammerjs": "^2.0.36",
    "hammerjs": "^2.0.8",
    "ionic-angular": "3.9.5"...

最佳答案

在尝试找出解决方法的几个小时后,我想到了声明每帧动画的帧,我意识到只有非动画帧没有运行。因此,如果您想为该浏览器和设备编写动画,您只需要使用具有“animate”功能的动画。如果您遇到此问题,请以这种方式声明您的动画,它将在 safari 和 iphone 上运行: 我改变了这个:

export const slideLeftEnterSelf = trigger('slideLeftEnterSelf', [
    transition(':enter', [
        query(':self', [style({ opacity: 0, transform: 'translateX(150%)', position: 'absolute' })], { optional: true }),
        query(':self', [animate('0.3s', style({ opacity: 1, transform: 'translateX(0)' }))], { optional: true })
    ])
]);

对此:

export const slideLeftEnterSelf = trigger('slideLeftEnterSelf', [
    transition(':enter', [
        query(':self', [style({ opacity: 0, transform: 'translateX(100%)' })], { optional: true }),
        query(':self', [animate('0.1s', style({ transform: 'translateX(100%)', opacity: 0 }))], { optional: true }),
        query(':self', [animate('0.1s', style({ transform: 'translateX(80%)', opacity: 0.3 }))], { optional: true }),
        query(':self', [animate('0.1s', style({ transform: 'translateX(50%)', opacity: 0.5 }))], { optional: true }),
        query(':self', [animate('0.1s', style({ transform: 'translateX(30%)', opacity: 0.8 }))], { optional: true }),
        query(':self', [animate('0.2s', style({ transform: 'translateX(0)', opacity: 1 }))], { optional: true })
    ])
]);

关于ios - Angular :enter animation does not run at IOS device,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57173720/

相关文章:

angular - 通过父组件以编程方式删除子组件

ionic-framework - 如何更改 ionic 3 选项卡大小和颜色?

ios - 如何限制 NSURLCache 磁盘大小

javascript - 找不到 Phonegap.js

ios - 在 iOS 的 ViewController 中声明 View 时,为什么在 Swift 中使用 "weak"关键字

ionic-framework - 如何在 ionic 框架中更改应用程序版本?

android - cordova.plugins 给出未定义

iphone - 我如何知道编译器是否启用了 ARC 支持?

javascript - 在 Angular2 路由器导出中加载外部 URL

javascript - 动态调整 ag-Grid header 高度