用途:在 Hero 区或作品集页面实现“图片由粒子拼合”的滚动效果——粒子从随机散布位置随滚动进度汇聚成图片/Logo,向上滚动时重新散开。适用于用户提到 particle image、粒子汇聚成图、point cloud morph、three.js particle scroll 的场景。不适用于单平面 zoom-blur 式图片过渡,也不适用于无需 WebGL 的轻量滚动效果。
主要能力:隐藏 canvas 采样源图(getImageData + stride + alphaThreshold)得到目标坐标与 RGB 颜色;每个采样点对应 THREE.Points 中一个粒子,起点随机、终点为像素坐标,分别存于两个 Float32Array;单个 rAF 节流的 scroll 监听计算 targetProgress,逐帧 lerp 并更新 position attribute;PointsMaterial 使用 size、sizeAttenuation、vertexColors 保留原图颜色;以 class 形式提供 destroy(),释放 rAF、scroll/resize 监听及 geometry、material、renderer。
使用方式:默认优先复制原作者原版文件(CodePen 公开、MIT,位于外部仓库 Rheinmir/uiux-asset,gallery 见 https://rheinmir.github.io/uiux-asset/scroll-effects/),保留首行署名注释,仅改内容、图片与颜色;需要整套离线可执行 git clone --depth 1 https://github.com/Rheinmir/uiux-asset。若项目不允许引入外部库,改用 assets/demo.html、demo.css、demo.js 的 vanilla 版本,调整 imageUrl、particleCount、particleSize 等初始化参数;未传 imageUrl 时 demo 会在隐藏 canvas 上绘制示例文字,可离线直接运行。生产接入需删除 importmap,执行 npm install three,并改为通过打包器 import。本地须经 HTTP 运行,不可用 file://。
限制与验证:粒子数越多 CPU/GPU 越重,建议中端设备控制在 5000–10000 以内,并用 DevTools Performance/FPS 实测后再调整;提高 sampleResolution 会增加初始化采样开销。透明背景 PNG 采样效果优于实底 JPEG,实底图需先裁剪。用 playwright-verify 在 progress 0/0.5/1 截图并读取 console,WebGL 上下文错误通常静默无异常。若无法访问原链接或不能拉取外部库,走 vanilla 分支;FPS 下降则不得继续增加粒子数;console 报 WebGL 错误视为验证失败,不予交付。具体收费、价格与平台信息暂未提供。