更新记录
1.3.1(2026-10-27)
修复
- 修复蒸汽模式不支持选项式 API 的编译报错。
- 使用
ref、computed、watch和组合式生命周期保留原有参数默认值、样式计算、按压回弹、导航选择事件及卸载清理;导航栏改用模板 ref 获取内部元素。 - 通过
defineExpose显式暴露原有方法,保留父组件通过ref调用方法的用法。 - 显式声明
click事件,避免 Web 下手动派发与根节点原生事件透传造成重复回调,禁用时不触发点击回调。 - 导航栏仅在 Android VDOM 模式直接访问原生 View;蒸汽模式保留触摸事件处理和
lock-scroll通知,供父级控制滚动。 - x 容器将外层底色、阴影和缩放与内层圆角裁剪分开,各绘制层显式同步
radius;导航滑块高光同步滑块圆角,避免仅依赖父级裁剪。 - 修复 x 导航栏固定项宽场景的
flex: 0导致项宽收缩,改为显式设置flexGrow: 0/flexShrink: 0;导航外层允许阴影溢出,保留原有测量、点击及拖动逻辑。 - 修复 x 导航栏 Android Kotlin 编译时的
emitSelection前向引用及itemWidth/disabled监听源类型推导错误;
1.3.0(2026-10-23)
优化
- 玻璃绘制从 8 层收成模糊、底板、高光 3 层。静止时不挂
transform,背景模糊可以透出来。 - H5 折射滤镜去掉色散矩阵链,色边改在高光层绘制。
- 演示页重构:可拖动玻璃、极光 / 网格 / 落日、折射 / 模糊 / 高光、按压、导航、三种材质、性能档。背景场景属于演示页,不是插件能力。
- 修复 x Demo 卡片拖动卡顿及带动页面滚动:按下时同步锁定原生滚动,移除异步测量与逐次布局更新,合并移动事件后直接更新卡片 transform。
- 修复 x 导航滑块没有滑动过渡:按实际宽度计算 transform 位移,支持点击切换及横向拖动跟随,松手后吸附选项;纵向手势继续滚动页面。
性能档
同一套参数,三档只改变采样,不增加新接口。
| quality | 名称 | 行为 |
|---|---|---|
1 |
轻量 | 保留边缘高光,关闭 SVG 折射和色散 |
2 |
均衡 | H5 使用标准折射和模糊采样 |
3 |
细腻 | H5 提高位移和噪声采样,色散强度约为均衡档的 2.3 倍 |
各端差异
- H5:
backdrop-filter模糊,Q2 / Q3 才有 SVG 背景弯折和色散。Q1 只有高光和模糊。 - App-vue:同一套 Vue 组件。模糊取决于 WebView 是否支持
backdrop-filter。折射位移和 Q3 色散不在 App 上执行,折射参数主要改变边缘亮度。Q1 / Q2 / Q3 外观接近。 - nvue / uni-app x:拟态降级,使用透明度、边框、高光和缩放。没有像素折射,也没有 SVG 滤镜。
1.2.4(2026-09-01)
- 修复uniapp x 兼容问题
- Demo 图片迁移到插件
static目录并使用模块绝对路径,保证 Android 打包后可访问。
平台兼容性
uni-app(5.07)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | √ | √ | √ | √ | √ | √ | √ | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.07)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | - | - |
LF Glass 液态玻璃
插件地址:https://ext.dcloud.net.cn/plugin?id=27813
翎赋 lf-glass:透明液态玻璃组件 + 玻璃导航栏。
统一 API,按平台渐进增强:H5 最完整,App-vue 次之,uni-app x / nvue 稳定拟态降级。
当前版本:1.3.1
组件选择
| 场景 | uni-app Vue | uni-app x | nvue |
|---|---|---|---|
| 玻璃容器 | lf-glass |
lf-glass-x |
lf-glass(同目录 .nvue 自动适配) |
| 玻璃导航栏 | lf-glass-navbar |
lf-glass-navbar-x |
lf-glass-navbar(同目录 .nvue) |
平台兼容
图例:√ 已验证;u 未充分验证;- 本版不支持。视觉按端渐进增强,不是像素级同渲染。
| 运行时 / 端 | 状态 | 说明 |
|---|---|---|
| Vue3 | √ | |
| Vue2 | - | 本版不支持 |
| H5 | √ | Q2 / Q3 有 SVG 折射与色散;Q1 只有高光和模糊 |
| Android App-vue | √ | 视 WebView 的 backdrop-filter;无 SVG 折射,三档外观接近 |
| iOS App-vue | u | 18Pro验证 其他版本未验证 |
| nvue | √ | 拟态降级(半透明 + 边光 + 缩放),无 SVG 滤镜 |
| uni-app x App(VDOM) / Web | u | lf-glass-x 拟态降级,无像素折射 |
| uni-app x App 蒸汽模式 | u | 两个 x 组件使用 script setup;未做全机型验证 |
| uni-app x 鸿蒙 / 微信 | - | 未适配 |
| 小程序 | - | 本版不支持(无完整 SVG filter) |
| 鸿蒙 App | - | 未适配 |
特性
Android 的 uni-app x Demo 与传统 Demo 使用相同布局和场景配色。极光、网格、落日及各展示区的渐变由 Demo 内的原生 Canvas 绘制,不依赖生成脚本或背景图片;这些场景装饰不属于玻璃组件的渲染能力。
- 色调:
tint/tintColor/intensity - 光学:折射率、厚度、bezel、高光角度/饱和度、色散
- Q 弹:弹簧缩放(
easingType="spring"),可由scaleDuration推导手感 - 性能档:
quality1 轻量 / 2 均衡 / 3 细腻。列表和导航栏用1 - 导航栏:轻量 thumb + 真实宽度定位,支持文字/图片 icon
- 事件:
ready/error/click - 无第三方依赖
安装
将插件放入:
uni_modules/lf-glass
开启 easycom / uni_modules 自动扫描后可直接使用组件标签。也可手动引入:
import LfGlass from '@/uni_modules/lf-glass/components/lf-glass/lf-glass.vue'
import LfGlassNavbar from '@/uni_modules/lf-glass/components/lf-glass-navbar/lf-glass-navbar.vue'
快速上手
<lf-glass
size="card"
tint="clear"
intensity="medium"
:radius="24"
:quality="2"
:refractive-index="1.35"
:glass-thickness="160"
:bezel-width="20"
:specular-angle="60"
:scale-multiplier="1.12"
:scale-duration="380"
easing-type="spring"
>
<view>液态玻璃</view>
</lf-glass>
导航栏
<lf-glass-navbar
v-model="current"
:items="items"
:height="60"
:quality="1"
tint="dark"
/>
const current = ref(0)
const items = [
{ id: 'home', label: '首页' },
{ id: 'list', label: '发现', icon: '/static/tab/list.png' },
{ id: 'mine', label: '我的', icon: '我' }
]
icon 支持:
- 图片:
http(s)://、/本地路径、data:image、常见图片后缀 - 其他字符串:按文本图标渲染
uni-app x
使用 lf-glass-x / lf-glass-navbar-x。从 1.3.1 起,两个组件均采用 <script setup lang="uts">,可用于蒸汽模式的组合式页面,也保留 VDOM 用法。蒸汽模式要求引用组件的页面及其他子组件同样使用 script setup,不能混入选项式 <script>。参见 DCloud 蒸汽模式说明。
<template>
<lf-glass-x tint="dark" intensity="medium" :radius="20" :quality="1">
<text>Glass X</text>
</lf-glass-x>
</template>
<script setup lang="uts">
import LfGlassX from '@/uni_modules/lf-glass/components/lf-glass-x/lf-glass-x.uvue'
</script>
导航栏在横向拖动开始/结束时触发 lock-scroll(true / false),嵌在 scroll-view 中时可用它控制父级 scroll-y。蒸汽模式下组件不会直接调用 Android getAndroidView()。
<template>
<scroll-view :scroll-y="!navSliding" style="height: 400px;">
<lf-glass-navbar-x v-model="current" :items="items" @lock-scroll="onLockScroll" />
</scroll-view>
</template>
<script setup lang="uts">
import LfGlassNavbarX from '@/uni_modules/lf-glass/components/lf-glass-navbar-x/lf-glass-navbar-x.uvue'
const current = ref(0)
const navSliding = ref(false)
const items = [
{ label: '首页', icon: '⌂' },
{ label: '我的', icon: '我' }
] as UTSJSONObject[]
function onLockScroll(locked: boolean) {
navSliding.value = locked
}
</script>
本次迁移覆盖插件的两个 x 组件;仓库 app-x 运行基座与玻璃演示页仍有选项式代码,尚未整体迁移为蒸汽模式。
迁移兼容边界:原有组件方法通过 defineExpose 保留 ref 调用;组件内部状态(例如 scaleValue、current)不作为公开实例字段保证兼容。Web 下 click 现在只触发组件事件一次,避免旧版原生事件透传造成的重复回调;禁用时不触发。
圆角设置
容器和导航栏统一通过数值属性 radius 设置圆角,例如 :radius="24";动态修改该属性会同步更新绘制层和裁剪层。外部 style/class 可继续设置尺寸和布局,不作为覆盖内部圆角的接口。
各实现保持原有尺寸语义:
| 实现 | radius 单位 |
|---|---|
lf-glass / lf-glass-navbar 的 Vue 实现 |
rpx |
lf-glass-x / lf-glass-navbar-x |
px |
| nvue 实现 | 保持原有数值样式尺寸语义,不额外换算 |
x 容器将外层底色、阴影、缩放与内层圆角裁剪分开,边框和高光层显式使用同一圆角,导航滑块的高光也同步滑块圆角。这样避免仅靠父级裁剪或圆角继承绘制四角。iOS 原生端存在阴影与 overflow: hidden 同层设置的已知冲突,属于这次处理的兼容风险;尚不能据此认定反馈已在设备上复现。DCloud 说明
需要显示玻璃外部阴影时,父容器也应允许 overflow: visible;父级自身设置了 overflow: hidden,仍会裁掉超出父级的阴影,这与组件内部的圆角裁剪是两回事。
关键节点保持普通视图,不支持为这两个 x 组件额外启用 flatten。蒸汽模式与 VDOM 使用同一套组件实现,均需完成目标端验证。
lf-glass Props
基础
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
| size | String | tag |
tag / card / panel |
| tint | String | dark |
dark / light / clear |
| tintColor | String | '' |
自定义底色(#hex / rgb / rgba) |
| intensity | String | medium |
soft / medium / strong;未传 blur/opacity 时生效 |
| radius | Number | 12 |
圆角;Vue 为 rpx、x 为 px、nvue 保留原数值语义,见上文 |
| blur | Number | — | 显式模糊,优先于 intensity |
| opacity | Number | — | 显式透明度,优先于 intensity |
| blurEnable | Boolean | true |
是否启用背景模糊 |
| saturation | Number | 150 |
背景饱和度 |
| edgePreset | String | auto |
auto / light / dark(只调边光,不覆盖 opacity) |
| backgroundColor | String | '' |
直接指定背景 |
| width / height | Number / String | — | 可选尺寸 |
| lClass | String | '' |
根节点额外 class |
光学
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
| distortion | Boolean | true |
H5 SVG 折射开关(仍受 quality 约束) |
| refractiveIndex | Number | 1.3 |
折射率 |
| glassThickness | Number | 120 |
玻璃厚度感 |
| bezelWidth | Number | 18 |
内沿 bezel |
| specularOpacity | Number | 0.85 |
高光强度 |
| specularSaturation | Number | 16 |
高光饱和 |
| specularAngle | Number | 60 |
高光角度 |
| quality | Number | 2 |
1 轻量 / 2 均衡 / 3 细腻,见下表 |
| displacementScale | Number | 7 |
基础位移 |
| aberrationIntensity | Number | 0.7 |
色散 |
| baseFrequency | Number | 0.009 |
SVG 噪声频率(H5) |
| numOctaves | Number | 2 |
SVG 噪声层数(H5) |
| seed | Number | 8 |
SVG 噪声种子(H5) |
quality 说明:
| 值 | 行为 | 建议场景 |
|---|---|---|
1 |
保留边缘高光,关闭 SVG 折射和色散 | 导航栏、列表、弱设备 |
2 |
H5 标准折射和模糊采样 | 普通卡片 |
3 |
H5 更多采样,色散约为 2 的 2.3 倍 |
H5 焦点展示 |
App-vue 没有 SVG 折射,三档外观接近。nvue / uni-app x 为拟态,不随这三档产生像素折射。
Q 弹
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
| pressable | Boolean | true |
按压反馈 |
| scalable | Boolean | true |
允许缩放 |
| scaleMultiplier | Number | 1.08 |
抬起过冲倍率 |
| scaleDuration | Number | 420 |
动画时长;spring 时用于推导刚度/阻尼 |
| springStiffness | Number | — | 可选,覆盖推导刚度 |
| springDamping | Number | — | 可选,覆盖推导阻尼 |
| easingType | String | spring |
spring / ease |
| activeScale | Number | 0.97 |
按下缩放 |
| disabled | Boolean | false |
禁用 |
lf-glass-navbar Props
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
| modelValue | Number | 0 |
当前索引(v-model) |
| items | Array | [] |
{ id, label, icon? } |
| height | Number | 64 |
高度,单位 px |
| itemWidth | Number | 0 |
项宽;0 为均分 |
| thumbHeight | Number | 52 |
高亮块高度 |
| alwaysShowGlass | Boolean | true |
是否始终显示 thumb |
| quality | Number | 1 |
外壳玻璃性能档,默认省电 |
| tint / tintColor / intensity / radius | — | — | 透传外壳玻璃参数 |
| blur / opacity / edgePreset / distortion | — | — | 透传外壳玻璃参数 |
| refractiveIndex / glassThickness / bezelWidth | — | — | 透传光学参数 |
| specularOpacity / specularAngle | — | — | 透传高光参数 |
| iconSize | Number / String | 20 |
图标大小 |
| iconColor / iconColorActive | String | — | 文字图标颜色 |
| fontSize | Number / String | 12 |
文字大小 |
| textColor / textColorActive | String | — | 文字颜色 |
| gap | Number / String | 4 |
图标与文字间距 |
| disabled | Boolean | false |
禁用 |
| lClass | String | '' |
根节点额外 class |
Events
| 事件 | 组件 | 说明 |
|---|---|---|
| click | lf-glass | 点击玻璃 |
| ready | lf-glass | 初始化完成,返回 { platform, quality, distortion, blurEnable } |
| error | lf-glass | 滤镜/尺寸测量异常 |
| update:modelValue | lf-glass-navbar | 选中变化(v-model) |
| change | lf-glass-navbar | 选中变化 |
| input | lf-glass-navbar | Vue2 兼容选中变化 |
| lock-scroll | lf-glass-navbar-x | 横向拖动开始时为 true,结束、取消或卸载时为 false |
Demo
在 pages.json 顶层 pages 添加:
{
"path": "uni_modules/lf-glass/pages/demo/demo",
"style": {
"navigationBarTitleText": "LF Glass",
"navigationBarBackgroundColor": "#0b1218",
"navigationBarTextStyle": "white"
}
}
跳转:
uni.navigateTo({
url: '/uni_modules/lf-glass/pages/demo/demo'
})
注意事项
- 玻璃需要背后有图片、渐变或复杂背景,纯色底效果弱。
- H5 在 Q2 / Q3 才有背景弯折和色散。App-vue 的模糊取决于 WebView 的
backdrop-filter,折射参数主要改变边缘亮度。 - nvue / uni-app x 为拟态降级,参数映射到透明度、边框、高光与缩放,不会出现 H5 级折射。Q1 / Q2 / Q3 在这两端不产生像素级差异。
- 列表、Tab、导航栏请优先
quality=1,避免多实例 SVG 滤镜拖慢页面。 - 导航栏窄屏建议
items ≤ 5;thumb 会按实测宽度定位。 edgePreset只调边框/高光权重,不会覆盖你传入的opacity/tint。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 163
赞赏 1
下载 12719433
赞赏 1958
赞赏
京公网安备:11010802035340号