Files
cmr-mini/doc/archive/experience/体验壳子方案.md

238 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Experience Shell 方案
> 文档版本v1.0
> 最后更新2026-04-02
本文档用于定义小程序中 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` 内容区
也就是:
```text
experience-shell
├─ backdrop
├─ native header
└─ web-view body
```
---
## 3. 支持的展示方式
第一阶段只支持 3 种:
- `sheet`
- `dialog`
- `fullscreen`
### 3.1 `sheet`
适合:
- 打点后的文创内容
- 拍照任务
- 轻互动内容
视觉:
- 自底部升起
- 圆角卡片
- 半透明暗背景
### 3.2 `dialog`
适合:
- 结果页
- 中短内容
- 重要说明
视觉:
- 居中大卡片
- 更聚焦
### 3.3 `fullscreen`
适合:
- 长内容
- 强定制专题页
- 复杂表单/小游戏
---
## 4. 配置结构
H5 内容配置建议支持:
```json
{
"type": "h5",
"url": "https://example.com/content/control-1",
"bridge": "content-v1",
"presentation": "sheet"
}
```
字段说明:
- `type`
当前支持 `native` / `h5`
- `url`
H5 页面地址
- `bridge`
bridge 版本
- `presentation`
展示方式,支持:
- `sheet`
- `dialog`
- `fullscreen`
默认值建议:
- 内容体验默认 `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` 三种体验形态。**