用途:在 components/grid-wallet-demo 中构建和复用“液态玻璃”折射 UI,核心组件为 LiquidGlass / Glass / GlassOver,另含 FrostPanel。完整文档见 components/grid-wallet-demo/src/components/liquid-glass/README.md,实现非平凡功能前应先阅读。
主要能力与选型:玻璃折射的是自身子元素而非页面背景,没有“磨砂背后任意内容”模式。已知背景(颜色/渐变/图片/图案)用 GlassOver,它会自动生成背景副本;需要折射已渲染内容或自定义背景接线用 Glass(即 LiquidGlass);大面积磨砂面板/模态用 FrostPanel(GPU backdrop-filter + 高光边缘,Safari 性能更好);小型表面折射静态屏幕背后内容可用 GlassOver 的 backdropNode;在 Safari 上折射实时极光需用 WebGL 的 AuroraLensButton(圆形)或 AuroraLensPanel(矩形圆角)。默认走 SVG 路径(Glass/GlassOver),适用于实时 DOM;仅当折射非实时 DOM(canvas、video)时才需着色器/WebGL 路径,目前唯一 WebGL 渲染器 StageGL 为手机预览专用,不可直接复用。
用法:从 '@/components/liquid-glass' 导入 GlassOver,传入与所在表面相同的 CSS 背景作为 backdrop,children 为不折射的顶层内容;任意 GlassConfig 字段均可作为 prop,可从 DEFAULT_GLASS、PHONE_SHELL_GLASS 预设开始覆盖。FrostPanel 使用更精简的 FrostConfig。
限制与注意事项:悬停/缩放应动画 transform: scale(),不要改宽高或圆角;纯色背景上只能看到高光/边缘;小元素需降低 depth/scale;specularRotation 有方向性;squircle 圆角仅 Chromium 支持;外层阴影需放在带相同圆角的包裹层上;平铺背景需传 backdropOffset 对齐;圆形与胶囊自动径向折射;实时/变化内容在 Safari 上问题较多,WebKit 对复制子树做 SVG 位移会输出空结果,Safari 折射应改用 WebGL 并仅对 Chromium 启用 SVG 路径;大面积面板不折射只磨砂。调参可运行演示(npm run dev,端口 4000),在 App 面板切换到 swag 模式,滑块与 GlassConfig 一一对应。