page-container
组件类型:UniPageContainerElement
弹层容器组件,效果类似于 popup 弹出层,当该组件处于显示状态时,用户进行返回操作,会关闭组件而不关闭当前页面
page-container 的特点:
- 与普通前端popup类组件相比,page-container组件能响应返回操作。返回操作具体指:右滑手势、安卓物理返回键、和调用
navigateBack 接口三种返回情形。小程序未提供监听返回的API,想实现返回操作关闭弹层而不是页面,只能使用page-container组件。 - 与dialogPage相比,
page-container 是组件而不是页面;page-container 跨端,而 dialogPage 不支持小程序;dialogPage 支持覆盖pages.json中定义的顶部导航栏和tabbar,而 page-container不支持。
兼容性
| Web | 微信小程序 | Android | iOS | HarmonyOS | HarmonyOS(Vapor) |
| 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
属性
| 名称 | 类型 | 默认值 | 兼容性 | 描述 |
| show | boolean | false | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 是否显示容器组件 |
| duration | number | 300 | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 动画时长,单位毫秒 |
| z-index | number | 100 | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| z-index 层级 |
| overlay | boolean | true | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 是否显示遮罩层 |
| round | boolean | false | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 是否显示圆角 |
| position | top | left | bottom | right | center | "bottom" | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 弹出位置 |
| 合法值 | 兼容性 | 描述 | | top | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 顶部 | | left | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | x | 5.02 | 5.02 | 5.02 | 5.02 |
| 左侧 | | bottom | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 底部 | | right | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 右侧 | | center | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 居中 |
|
| close-on-slide-down | boolean | false | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 是否在下滑一段距离后关闭 |
| overlay-style | string | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 自定义遮罩层样式 |
| custom-style | string | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 自定义弹出层样式 |
| @beforeenter | eventhandle | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| (eventhandle) 进入前触发 |
| @enter | eventhandle | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| (eventhandle) 进入中触发 |
| @afterenter | eventhandle | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| (eventhandle) 进入后触发 |
| @beforeleave | eventhandle | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| (eventhandle) 离开前触发 |
| @leave | eventhandle | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| (eventhandle) 离开中触发 |
| @afterleave | eventhandle | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| (eventhandle) 离开后触发 |
| @clickoverlay | (event: UniPointerEvent) => void | - | |
Web
|
微信小程序
|
Android
|
iOS
|
HarmonyOS
|
HarmonyOS(Vapor)
| | 5.02 | 4.41 | 5.02 | 5.02 | 5.02 | 5.02 |
| 点击遮罩层时触发 |
Tips
- uni ui组件库中曾广泛使用的uni-popup组件,在uni-app x中推荐改用 page-container 组件替代
- 组件支持拦截用户的返回操作,包括右滑手势、安卓物理返回键和调用 navigateBack API
- Web 设置
overlay: true 时,组件会禁止背景页面滚动,避免滚动穿透 - 小程序
uni.navigateBack 无法在页面栈顶调用,此时没有上一级页面 - 小程序不支持
左侧弹出,App 和 Web 支持 - 微信小程序
enter 和 leave 相关事件的回调函数有参数 event,App 和 Web 平台没有 - 开启
closeOnSlideDown 后,微信小程序需要快速下滑才生效,App 和 Web 会跟着手指拖动滑动 - 小程序页面最多只有1个page-container,若已存在page-container的情况下,无法新弹出page-container。App 和 Web 支持弹出多个page-container组件,后弹覆盖先弹。
参见