Ionic 2中选项卡之间转换时的动画

问题描述 投票:3回答:2

我有一个带有基本标签的离子2应用程序。

<ion-tabs selectedIndex="1">
  <ion-tab [root]="tab1Root" tabTitle="hunts" tabIcon="book"></ion-tab>
  <ion-tab [root]="tab2Root" tabTitle="home" tabIcon="home"></ion-tab>
  <ion-tab [root]="tab3Root" tabTitle="hunting" tabIcon="locate"></ion-tab>
</ion-tabs>

标签显示完美。但我想在标签之间转换时有一个滑动动画。也就是说,当我从中间选项卡按下最右边的选项卡时,中间选项卡应向左滑动,最右边的选项卡应从右侧滑入。这是一个基本的android动画。

我无法找到有关如何完成此任务的任何细节。这在Ionic(2.2.0)中仍然不可能吗?

ionic-framework ionic2
2个回答
12
投票

在开始之前

$ ionic cordova plugin add com.telerik.plugins.nativepagetransitions
$ npm install --save @ionic-native/native-page-transitions

然后按照以下方式在src/app/app.module.ts中导入插件

import { NativePageTransitions } from '@ionic-native/native-page-transitions';

并将其添加为提供者。

  providers: [
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    StatusBar,
    SplashScreen,
    NativePageTransitions // <-- add me here
  ]

去你的src/pages/tabs/tabs.ts

导入插件

import { NativePageTransitions, NativeTransitionOptions } from '@ionic-native/native-page-transitions';

将插件添加到构造函数中

  constructor(public navCtrl: NavController,
              private nativePageTransitions: NativePageTransitions) {
  }

添加这两个变量

loaded:   boolean = false;
tabIndex: number  = 0;

然后添加这两个函数

  private getAnimationDirection(index:number):string {
    var currentIndex = this.tabIndex;

    this.tabIndex = index;

    switch (true){
      case (currentIndex < index):
        return('left');
      case (currentIndex > index):
        return('right');
    }
  }

  public transition(e:any):void {    
    let options: NativeTransitionOptions = {
     direction:this.getAnimationDirection(e.index),
     duration: 250,
     slowdownfactor: -1,
     slidePixels: 0,
     iosdelay: 20,
     androiddelay: 0,
     fixedPixelsTop: 0,
     fixedPixelsBottom: 48
    };

    if (!this.loaded) {
      this.loaded = true;
      return;
    }

    this.nativePageTransitions.slide(options);
  }

然后转到src/pages/tabs/tabs.html按以下方式修改ion-tabs标签:

<ion-tabs (ionChange)="transition($event)">

要么

<ion-tabs (ionSelect)="transition($event)">

编辑Ionic 4

<ion-tabs (ionTabsWillChange)="transition($event)">

请享用。

PS:你可以在我的要点glemiere/58d1707ba82d40a55967601dbd0e72c9上找到完整的代码。

编辑如果要修改动画,以下是您需要的所有信息。 http://plugins.telerik.com/cordova/plugin/native-page-transitions


6
投票

我刚才提出了一个不同的解决方案......嘿嘿这是一个有趣的,一个原始的想法,但它在2分钟内给你一半过渡的感觉

纯CSS:

  1. 在全局应用程序的scss文件中创建一个css选择器,它将抓取加载到<ion-tabs>的路由器插座中的组件
  2. 在start上添加一个css动画:P - 每次插入新组件时都会运行它

app-e-tabs ion-router-outlet > .ion-page { 
  animation: fadeIn 0.3s 1 forwards;
}
@keyframes fadeIn {
  0% {
    opacity: 0;
    transform: translate3d(0, 5vh, 0);
  }
  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

当然可能存在数千种可能的问题,它们看起来永远不会像正确的页面转换那样......但它没有什么比这更好了:)

编辑:有些人指出你应该从css的第一行删除app-e-tabs - 它是我的应用程序中的模块的名称 - 这就是它落在我的代码中的原因。

© www.soinside.com 2019 - 2024. All rights reserved.