DEV Community

timsar2
timsar2

Posted on • Edited on

Custom Ionic Animation On Page Transition

Hello,
We want to make animation for ion-content and prevent the ion-header to be animated

ionic animation directive

let do it fast :D

Create a Directive Module

ionic generate module directive
Enter fullscreen mode Exit fullscreen mode
ionic generate directive page-animation --module directive
Enter fullscreen mode Exit fullscreen mode

This is PageAnimationDirective :

import { Directive, ElementRef } from '@angular/core';
import { createAnimation  } from '@ionic/core';
import { AnimationController } from '@ionic/angular';

@Directive({
  selector: '[appPageAnimation]'
})
export class PageAnimationDirective {

  constructor(private animationCtrl: AnimationController, private el: ElementRef) {
    this.dropIn();
  }

  private dropIn() {
    const animation = createAnimation()
              .addElement(this.el.nativeElement)
              .duration(500)
              .iterations(1)
              .fromTo('transform', 'translateY(-10%)', 'translateY(0%)');
    animation.play();
  }
}
Enter fullscreen mode Exit fullscreen mode

Export PageAnimationDirective from DirectiveModule:

@NgModule({
  declarations: [PageAnimationDirective],
  imports: [
    CommonModule
  ],
  exports: [PageAnimationDirective]
})
export class DirectiveModule { }
Enter fullscreen mode Exit fullscreen mode

Import DirectiveModule to Component.Module.ts of each component you want to be animated like this:

@NgModule({
  imports: [FormsModule, DirectiveModule],
  declarations: [FolderPage]
})
Enter fullscreen mode Exit fullscreen mode

From you component.html add appPageAnimation directive to ion-content:

<ion-content [fullscreen]="true" appPageAnimation>
Enter fullscreen mode Exit fullscreen mode

To Prevent ion-header, tabs, etc.. to be animated on page transition, make animate flag to false from app.module:

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [
    ...
    IonicModule.forRoot({ animated: false  }),
    ...
}
Enter fullscreen mode Exit fullscreen mode

Enjoy It :D

Top comments (0)