离子自定义模态动画

use*_*781 5 animation angularjs ionic-framework

离子模态带有slide-in-up. 我们可以将动画更改为fade-in吗?

Shr*_*awa 6

为了为 Ionic Modal 添加自定义转换,我们将使用 Ionic Modal OptionsenterAnimationleaveAnimationfromModalOptions 接口。对于模态,有转换状态:当我们关闭它时,模态的进入和模态的离开。如果您查看 Ionic Modal 选项界面,您会发现 2 个选项可以为两种状态添加动画。

export interface ModalOptions {
    showBackdrop?: boolean;
    enableBackdropDismiss?: boolean;
    enterAnimation?: string;
    leaveAnimation?: string;
    cssClass?: string;
}
Run Code Online (Sandbox Code Playgroud)

我们将在模态中使用这些选项来指定我们使用动画类创建的过渡类ionic-angular。所以让我们看看我们如何一步一步地创建和自定义动画。

为进入和离开创建 2 个过渡类:

on-enter-translate.transition.ts

import { Animation, PageTransition } from 'ionic-angular';
export class ModalTranslateEnterTransition extends PageTransition {
    public init() {
        const ele = this.enteringView.pageRef().nativeElement;
        const wrapper = new Animation(this.plt, ele.querySelector('.modal-wrapper'));
        wrapper.beforeStyles({ 'transform': 'translateX(100%);', 'opacity': 1 });
        wrapper.fromTo('transform', 'translateX(100%)', 'translateX(0)');
        wrapper.fromTo('opacity', 1, 1);
        this
            .element(this.enteringView.pageRef())
            .duration(500)
            .easing('cubic-bezier(.1, .7, .1, 1)')
            .add(wrapper);
    }
}
Run Code Online (Sandbox Code Playgroud)

on-leave-translate.transition.ts

import { Animation, PageTransition } from 'ionic-angular';

export class ModalTranslateLeaveTransition extends PageTransition {

    public init() {
        const ele = this.leavingView.pageRef().nativeElement;
        const wrapper = new Animation(this.plt, ele.querySelector('.modal-wrapper'));
        const contentWrapper = new Animation(this.plt, ele.querySelector('.wrapper'));

        wrapper.beforeStyles({ 'transform': 'translateX(100%)', 'opacity': 1 });
        wrapper.fromTo('transform', 'translateX(0)', 'translateX(100%)');
        wrapper.fromTo('opacity', 1, 1);
        contentWrapper.fromTo('opacity', 1, 0);

        this
            .element(this.leavingView.pageRef())
            .duration(500)
            .easing('cubic-bezier(.1, .7, .1, 1)')
            .add(contentWrapper)
            .add(wrapper);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在app.module.ts 中导入这些模块

export class AppModule {
    constructor(public config: Config) {
        this.setCustomTransitions();
    }
    private setCustomTransitions() {
        this.config.setTransition('modal-translate-up-enter', ModalTranslateEnterTransition);
        this.config.setTransition('modal-translate-up-leave', ModalTranslateLeaveTransition);
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用以下选项创建模态:

var modal = this.modalCtrl.create(AddToCartModalPage, {
    productId: this.productId,
    skuId: this.skuId,
    zipcode: this.zipcode,
    sellerProfileId: this.sellerProfileId,
    branchId: this.branchId,
    changeSeller: this.changeSeller
}, {
    showBackdrop: false,
    enableBackdropDismiss: false,
    cssClass: 'add-to-cart-modal',
    enterAnimation: 'modal-translate-up-enter',
    leaveAnimation: 'modal-translate-up-leave'
});
Run Code Online (Sandbox Code Playgroud)

在此处查找我的文章的更多信息: 博客

在此处找到完整的演示存储库: Github


gan*_*arg 0

no ionic 不提供淡入动画。但你可以通过使用animate.css来做到这一点