uni-app页面跳转动画必须在pages.json对应页面的style中配置animationtype和animationduration,仅对uni.navigateto/redirectto生效;switchtab强制系统动画,h5需css手动实现,app端才识别该配置。
页面跳转动画不是加个配置就能跑通,它在不同平台走的是完全不同的底层机制——app 端靠原生 webview 转场,h5 靠 css 手动模拟,小程序则映射到微信原生动画 api。配错位置、用错 api、或误判平台,动画就直接消失。
pages.json 里 animationType 不生效?检查这三处
90% 的“没动画”问题出在配置位置或平台误用。
-
animationType必须写在pages.json的具体页面对象的style下,不能写在globalStyle或tabBar里 - 只对
uni.navigateTo和uni.redirectTo生效;uni.switchTab强制走系统 tabBar 动画,animationType完全被忽略 - App 端才认这个字段,H5 和小程序不读取它——H5 下你配了
"slide-in-right"也等于白配 - 必须同时配
animationDuration(单位毫秒),漏掉就退化为无动画跳转
H5 页面要动画?别碰 pages.json,改用 CSS + success 回调
H5 根本不解析 animationType,强行依赖配置只会浪费调试时间。
- 在目标页面的根元素上加初始 class,比如
page-out - 调用
uni.navigateTo,在success回调里给新页面 DOM 加page-in类 - CSS 里定义
.page-in和.page-out的transform+opacity过渡,只写这两个属性,避免触发重排 - 用
v-if替代v-show控制 DOM 存在状态,防止小程序里 DOM 销毁重建导致动画中断
用了自定义导航栏,原生动画大概率失效
一旦设置 "navigationStyle": "custom",页面就脱离原生导航栈,跳转由 JS 控制,App 端原生动画自动降级。
- 低端 Android 机型上尤其明显,可能直接“闪一下”就切过去
- 此时唯一可靠路径是:CSS 过渡 +
this.$nextTick触发 class 切换,或在onShow里用requestAnimationFrame启动动画 - nvue 页面支持
plus.webview.currentWebview().setStyle()动态设popIn,但普通.vue页面调uni.createAnimation会报is not a function
动画卡顿或表现异常?先看是不是时机/环境错了
真机打包后才真正启用原生动画,HBuilderX 调试器和 npm 启动的服务默认禁用部分动画逻辑。
- 调试时看到“白屏”“闪一下”,先确认是否在真机运行、是否关闭了「调试基座」的“同步刷新”
- tabBar 页面用
navigateTo跳过去,动画必然失效——这是设计使然,不是 bug - 动画期间执行 heavy JS(如未节流的
onPullDownRefresh、大量 DOM 操作)会掉帧,建议把动画时长控制在 200–400ms - 别在 H5 下尝试
zoom-fade或rotate,这些值在部分 Android 机型上直接不渲染
最常被忽略的点:动画效果高度依赖生命周期钩子触发时机、构建模式、甚至页面是否注册进 pages.json 的 pages 数组。没效果时,先查路径和注册状态,再查代码。











