uniapp隐藏页面动画

uniapp隐藏页面动画

为提高用户的交互体验,开发者一般都会在应用中增加一些动画效果,比如页面切换时的渐变、上下滑动、左右移动等等。但是有时候我们需要让一些页面在切换时不展示过渡动画,这时候就需要用到uniapp的隐藏页面动画功能。

1. 如何控制页面的转场动画?

在uniapp中,我们可以利用页面的生命周期函数进行页面转场动画的控制。其中,目标页面的onShow生命周期函数中可以获取到一个animation对象,进而控制页面切换时的动画效果。

以下是一个利用animation对象的例子:

// pages/index/index.vue

onShow() {

const animation = uni.createAnimation({

duration: 500,

timingFunction: 'ease-out'

});

this.animation = animation;

// 执行动画效果

animation.opacity(1).step();

setTimeout(() => {

this.setData({

animationData: animation.export()

})

}, 100);

}

代码中我们利用onShow生命周期函数中获取到的animation对象,实例化了一个动画,设定了持续时间500ms以及缓动函数为'ease-out'。接着我们通过animation.opacity(1).step()来描述动画效果,即透明度从0变为1。

在setData函数中,我们把动画组合并输出,就可以让动画效果在页面显示的时候起作用了。需要注意的是,由于需要等待动画初始化渲染完成后,才可执行setData输出动画组合,因此需要加上一个setTimeout延时。

2. 如何隐藏页面转场动画?

根据前面介绍的方式,我们可以轻松地控制页面转场动画。但是对于一些特殊场景,我们可能需要在某些页面之间进行切换时,去掉页面转场动画,这时候就需要用到uniapp的隐藏页面转场动画功能了。

**步骤一:取消目标页面的进场动画**

我们通过以下代码来取消目标页面的进场动画:

// pages/detail/detail.vue

onLoad() {

uni.hideLoading();

}

onShow() {

uni.nextTick(() => {

const pages = getCurrentPages();

const currPage = pages[pages.length - 1];

const prevPage = pages[pages.length - 2];

const prevAnimation = prevPage.animation;

// 取消目标页面的进场动画

prevAnimation.translateX('100%').step({ duration: 0 });

this.setData({animationData: prevAnimation.export()});

});

}

代码中,我们首先在onLoad生命周期函数中取消了页面的加载动画。然后在onShow生命周期函数中通过uni.nextTick延迟到页面渲染后再执行其它代码。接着,我们获取到目标页面的前一页和当前页,将前一页的animation对象定义为prevAnimation,并通过prevAnimation.translateX('100%').step({duration:0})将目标页面的进场动画设定为从右侧移入,并且持续时间为0。

最后用setData函数将动画组合并输出,在页面显示时达到取消页面转场动画的目的。

3. 如何取消返回时的转场动画?

当你需要取消返回时的转场动画,可以通过uni.navigateBack()方法的 second 参数,来指定转场动画的效果。以下几个值可以选择:

- 'auto':自动选择转场动画,默认为 uni-app 定义的转场动画

- 'none':无动画立刻返回

- 'slide-out-right':从左边划出页面后返回

- 'slide-out-left':从右边划出页面后返回

- 'slide-out-top':从顶部划出页面后返回

- 'slide-out-bottom':从底部划出页面后返回

- 'fade-out':从不透明到透明后返回

- 'zoom-fade-out':从大变小并且透明后返回

- 'pop-out':从小变大并且透明后返回

- 'pop-in':从大变小后返回

以下是一个例子:

uni.navigateBack({

delta: 1,

animationType: 'none',

})

代码中我们通过animationType参数指定了返回时的转场动画效果为'none',既无转场动画,立刻返回。

4. 如何让页面消失时有动画效果?

当我们从一个页面切换到另一个页面时,有时候需要让原来的页面有一个消失动画效果,以下是一个例子:

onHide() {

const animation = uni.createAnimation({

duration: 800,

timingFunction: 'ease-in',

});

this.animation = animation;

animation.opacity(0).step();

this.setData({animationData: animation.export()});

}

代码中我们在onHide生命周期函数中获取一个animation对象,设定了持续时间800ms以及缓动函数为'ease-in'。接着我们通过animation.opacity(0).step()来描述动画效果,即透明度从1变为0。

最后通过setData函数将动画组合并输出,从而实现消失动画效果。

5. 总结

通过以上介绍,我们可以发现,在uniapp中实现隐藏页面动画非常简单,只要掌握好页面生命周期函数和animation对象的使用,就可以实现各种自定义的动画效果。