尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

uni-app 液态玻璃:光学参数、弹簧 Q 弹与多端降级

uni-app 液态玻璃:光学参数、弹簧 Q 弹与多端降级 uni-app 液态玻璃光学参数、弹簧 Q 弹与多端降级插件lf-glass1.2.0地址https://ext.dcloud.net.cn/plugin?id27813业务场景页面需要透明玻璃卡片、标签、导航栏。H5 用backdrop-filter与 SVG 折射App-vue、nvue、uni-app x 能力不同不能同一套渲染硬跑。本文说明组件分层、关键实现、用法和真机问题。需求三类界面玻璃容器标签 / 卡片 / 面板按压反馈按下缩小抬起弹簧过冲玻璃导航栏选中项高亮块跟随切换组件对应关系场景uni-app Vueuni-app xnvue玻璃容器lf-glasslf-glass-x同目录lf-glass.nvue玻璃导航栏lf-glass-navbarlf-glass-navbar-x同目录lf-glass-navbar.nvue无第三方依赖。Vue3。小程序不支持。平台差异环境行为H5backdrop-filter SVG 折射 / 色散 弹簧缩放App-vueWebView 支持时启用backdrop-filter保留 tint、边光、高光、弹簧nvue半透明底 边光 缩放无 SVG 滤镜uni-app xlf-glass-x透明度、边框、高光、缩放渐进增强小程序不支持全平台保持同一套 props / 事件。H5 光学最完整nvue / uni-app x App 为拟态降级不与 H5 像素级一致。渲染分层Vue 版根节点 transform(scale) ├─ H5 SVG filter折射 / 色散 ├─ warp / tint 底色 ├─ bezel / edge-dark / edge-light ├─ side-light / shine / specular └─ contentslot安装与引入目录uni_modules/lf-glasseasycom/uni_modules自动扫描后直接写标签。手动引入importLfGlassfrom/uni_modules/lf-glass/components/lf-glass/lf-glass.vueimportLfGlassNavbarfrom/uni_modules/lf-glass/components/lf-glass-navbar/lf-glass-navbar.vue同目录存在.vue与.nvue时vue 页面用.vuenvue 页面用.nvue。不要在pages.jsoneasycom 里写死.vue路径否则 nvue 无法命中。快速上手lf-glass sizecard tintclear intensitymedium :radius24 :quality2 :refractive-index1.35 :glass-thickness160 :bezel-width20 :specular-angle60 :scale-multiplier1.12 :scale-duration380 easing-typespring readyonReady view液态玻璃/view /lf-glass导航栏lf-glass-navbar v-modelcurrent :itemsitems :height60 :quality1 tintdark /constcurrentref(0)constitems[{id:home,label:首页},{id:list,label:发现,icon:/static/tab/list.png},{id:mine,label:我的,icon:我}]icon规则http(s)://、/本地路径、data:image、常见图片后缀 → 图片其他字符串 → 文本图标uni-app xlf-glass-x tintdark intensitymedium :radius20 :quality1 textGlass X/text /lf-glass-x关键实现quality 性能档utils.js中resolveQualityProfile控制是否启用折射、色散、specularquality行为使用场景1关闭 SVG 折射与 specular导航栏、列表、弱设备2默认光学普通卡片3更高位移与高光H5 焦点展示导航栏外壳默认quality1。一页多个玻璃实例时优先1避免多路 SVG 滤镜拖慢页面。tint / intensity / edgePresettintdark/light/clear决定底色倾向tintColor/backgroundColor覆盖底色intensity未传blur/opacity时提供默认模糊与透明度edgePreset只调整边框与高光权重不覆盖opacity/tint错误做法edgePreset写死整块背景色导致外部传入的opacity失效。当前实现已拆开底色走 tint 逻辑边光单独乘权重。H5 SVG 折射条件isH5 distortion qualityProfile.useDistortion。滤镜链路feTurbulence生成噪声feGaussianBlur软化feDisplacementMap位移 SourceGraphicRGB 通道feColorMatrixfeBlend做色散复合回原图位移量与refractiveIndex、glassThickness、displacementScale、quality相关。滤镜尺寸用ResizeObserver不支持则降级测量更新避免容器变大后滤镜区域不够。弹簧 Q 弹createSpringAnimator刚度 阻尼向目标收敛带过冲。存在requestAnimationFrame时用 rAFApp 无 rAF 时用setTimeout。scaleDuration通过springParamsFromDuration推导刚度与阻尼保证不同时长手感接近。也可显式传springStiffness/springDamping覆盖。按压流程touchstart/mousedown→ 目标activeScale默认 0.97touchend/mouseup→ 先冲到scaleMultiplier再回到1pressablefalse或scalablefalse时关闭该反馈。导航栏外壳关闭按压避免整条栏跟着弹。导航栏 thumbthumb 不用第二套完整玻璃只用轻量高光层。定位itemWidth 0按固定宽度计算itemWidth 0均分测量每个 item 真实宽度再定位错误做法均分场景按「总宽 / n」估算窄屏或文字宽度不一致时 thumb 偏移。当前实现在布局后读取实测宽度。Props 摘要lf-glass 基础属性默认说明sizetagtag/card/paneltintdarkdark/light/clearintensitymediumsoft/medium/strongradius12圆角单位 rpxblur / opacity—显式值优先于 intensityblurEnabletrue是否启用背景模糊edgePresetautoauto/light/darkquality2性能档 1 / 2 / 3光学属性默认说明distortiontrueH5 SVG 折射开关仍受 quality 约束refractiveIndex1.3折射率glassThickness120厚度感bezelWidth18内沿specularOpacity0.85高光强度specularAngle60高光角度aberrationIntensity0.7色散Q 弹属性默认说明pressabletrue按压反馈scalabletrue允许缩放scaleMultiplier1.08抬起过冲scaleDuration420动画时长mseasingTypespringspring/easeactiveScale0.97按下缩放lf-glass-navbar属性默认说明modelValue0当前索引v-modelitems[]{ id, label, icon? }height64高度单位 pxitemWidth00为均分quality1外壳性能档tint / intensity / radius 等—透传外壳玻璃事件事件组件说明clicklf-glass点击readylf-glass初始化完成返回平台与质量信息errorlf-glass滤镜或尺寸测量异常update:modelValue / changenavbar选中变化inputnavbarVue2 兼容选中变化用法示例卡片lf-glass sizecard tintdark intensitysoft :radius22 :quality2 edge-presetdark view classpad text光学玻璃/text /view /lf-glass列表项省电lf-glass v-foritem in list :keyitem.id sizetag :quality1 :distortionfalse tintdark intensitymedium text{{ item.title }}/text /lf-glass导航栏自定义颜色lf-glass-navbar v-modelcurrent :itemsitems :quality1 tintdark text-colorrgba(255,255,255,0.72) text-color-active#ffffff icon-colorrgba(255,255,255,0.72) icon-color-active#3ec4a8 /Demo 注册{path:uni_modules/lf-glass/pages/demo/demo,style:{navigationBarTitleText:液态玻璃,navigationBarBackgroundColor:#0b1218,navigationBarTextStyle:white}}uni.navigateTo({url:/uni_modules/lf-glass/pages/demo/demo})真机问题纯色背景上看不出玻璃玻璃依赖背后图片、渐变或复杂内容。纯色底缺少可折射 / 可模糊的信息。Demo 使用渐变或图片底。App-vue 模糊很弱或没有依赖 WebView 对backdrop-filter/-webkit-backdrop-filter的支持。不支持时仍保留 tint、边光、高光不会整块空白。列表卡顿多个quality2/3且开启 SVG 折射。列表、Tab、导航栏使用quality1或distortionfalse。edgePreset改完透明度不对旧实现把背景色写死。当前edgePreset只调边光权重透明度用opacity/intensity/tint。导航栏 thumb 跑偏均分模式下按理论宽度估算导致。使用实测 item 宽度定位窄屏控制items ≤ 5。nvue 没有折射nvue 无 SVG filter。参数映射到透明度、边框、高光与缩放。不要按 H5 截图像素对比。easycom 写死.vue后 nvue 失效nvue 页面无法命中同目录.nvue。删除写死路径交给自动解析。弹簧在 App 上不跟手无 rAF 时走setTimeout。调整scaleDuration或显式设置springStiffness/springDamping。外网背景图失败整页空白Demo 已加本地渐变兜底。业务页对image做error换本地底。小程序编译报错或无效果插件不支持小程序不要接入。圆角单位搞错lf-glass的radius单位是 rpx导航栏height单位是 px。混用导致比例失调。导航栏嵌套第二套完整玻璃做 thumb成本高、易糊。当前 thumb 为轻量高光层不要改回完整lf-glass嵌套。排查监听初始化onReady(payload){console.log(payload)// { platform, quality, distortion, blurEnable }}检查项背后是否有可见背景当前quality/distortion/blurEnableApp 端 WebView 是否支持 backdrop-filter看 tint 是否在、模糊是否在列表场景实例数量与 quality 档位nvue 是否误用了写死.vue的 easycom源码目录uni_modules/lf-glass/ ├── components/ │ ├── lf-glass/ # .vue .nvue utils.js │ ├── lf-glass-navbar/ # .vue .nvue │ ├── lf-glass-x/ # uni-app x │ └── lf-glass-navbar-x/ ├── pages/demo/demo.vue ├── readme.md ├── changelog.md └── article.md接入要求插件放到uni_modules/lf-glass注册 Demo 或业务页玻璃后方放置图片或渐变列表 / 导航栏使用quality1nvue / uni-app x 在对应环境验证不与 H5 截图逐像素对比easycom 不要写死.vue路径调用示例lf-glass sizecard tintclear :quality2 easing-typespring view液态玻璃/view /lf-glass问题反馈插件https://ext.dcloud.net.cn/plugin?id27813邮箱lingfugroupgmail.com
返回列表