3.6 KiB
3.6 KiB
Experience Shell 方案
本文档用于定义小程序中 H5 定制内容的承载方式。目标不是把 H5 做成真正的同页弹窗,而是做成:
- 独立页面路由
- 原生壳子控制外观
web-view只负责内容区
这样既保留了 H5 的定制能力,也能让用户感受更接近“弹窗”或“抽屉”。
1. 设计目标
当前 H5 内容页已经能打开,但整页全屏切换比较生硬,用户体验不够好。
新的 experience-shell 目标是:
- 视觉上像弹窗
- 保持原生关闭、回退、失败兜底逻辑
- 不把地图主页面和
web-view强绑在一起 - 为后续结果页 H5、文创内容 H5 复用
2. 核心原则
2.1 不做真正同页 H5 弹窗
微信小程序里的 web-view 更适合放在独立页面中承载。
不要尝试把 web-view 直接叠在地图页上方做真弹窗,否则后续很容易遇到:
- 层级冲突
- 手势冲突
- iOS / Android 表现不一致
- 遮罩和关闭逻辑变脏
2.2 原生壳子 + H5 内容区
最终结构应该是:
- 原生遮罩
- 原生标题栏
- 原生关闭按钮
web-view内容区
也就是:
experience-shell
├─ backdrop
├─ native header
└─ web-view body
3. 支持的展示方式
第一阶段只支持 3 种:
sheetdialogfullscreen
3.1 sheet
适合:
- 打点后的文创内容
- 拍照任务
- 轻互动内容
视觉:
- 自底部升起
- 圆角卡片
- 半透明暗背景
3.2 dialog
适合:
- 结果页
- 中短内容
- 重要说明
视觉:
- 居中大卡片
- 更聚焦
3.3 fullscreen
适合:
- 长内容
- 强定制专题页
- 复杂表单/小游戏
4. 配置结构
H5 内容配置建议支持:
{
"type": "h5",
"url": "https://example.com/content/control-1",
"bridge": "content-v1",
"presentation": "sheet"
}
字段说明:
type当前支持native/h5urlH5 页面地址bridgebridge 版本presentation展示方式,支持:sheetdialogfullscreen
默认值建议:
- 内容体验默认
sheet - 结果页默认
dialog
5. 原生壳子职责
原生壳子负责:
- 遮罩
- 标题、副标题
- 关闭按钮
- 页面进入/退出动画
- H5 打开失败回退
原生壳子不负责:
- H5 页面内部业务逻辑
- H5 具体视觉排版
6. 关闭与回退逻辑
6.1 原生关闭
原生必须始终支持:
- 右上/头部关闭
- 返回键关闭
- 失败时自动关闭并回退
6.2 H5 请求关闭
H5 可以通过 bridge 发:
close
然后由原生统一关闭壳子页。
6.3 H5 失败回退
如果出现:
- URL 无效
- 页面打不开
- bridge 初始化失败
统一回退到:
- 原生内容卡
- 原生结果页
7. 动画建议
sheet
- 遮罩淡入
- 面板自下而上出现
dialog
- 遮罩淡入
- 面板轻微放大进入
lite
在低端机或 lite 模式下:
- 只保留 opacity
- 降低位移动画强度
8. 推荐接入顺序
第一阶段
- 先把当前
experience-webview升级成 shell - 先支持
sheet - 先接
content-v1
第二阶段
- 补
dialog - 结果页 H5 开始复用壳子
第三阶段
- 主题样式可配置
- 过场动画接入
9. 一句话结论
小程序里的 H5 不应该直接作为“生硬全页”使用,也不应该强行做成“地图页上的真弹窗”。
最稳的方案是:
独立页面承载,但由原生壳子把它做成 sheet / dialog / fullscreen 三种体验形态。