Hello Navi

Tech, Security & Personal Notes

效果实验 · 08-mesh

实验说明

光场仅在桌面首页及本实验页显示:旧模式使用两侧留白,全背景模式使用整个背景并以真实遮罩排除文章与界面,不进入正文。默认是 Refined / 动态熔岩 / 每次打开随机 / 全背景 / 80% / 开启。页面不生成实验控制面板;下面的对照说明仅供开发测试参考。无 JavaScript 时本文、代码、目录和链接仍可阅读。

两种预设如何比较

  • Original08:保留最初 08 的三层酒红、蓝灰、淡紫径向渐变,以及顶部 20vh、底部 14vh 的位置。左右使用相同配方;只在真实正文边界需要时缩小原始留白宽度,避免装饰进入阅读区。
  • Refined:默认动态,黑底中的暗酒红、暖石墨与极弱冷灰,左右光源错位,没有白色亮核。左侧 22s、右侧 29s 独立往复,超出容器的渐变伪元素缓慢平移、缩放并轻微呼吸;只动画 transform/opacity,不移动正文或安全容器。内侧与上下边缘柔和退场;渐变 mask 与无 mask 时的黑色退场均固定在裁剪容器上。旧模式没有 Canvas;全背景可选 Canvas2D 对照或 PixiJS WebGL 实验。没有纹理噪声、鼠标跟随或新增 CDN。

仅在显式启用开发对照控件时,可关闭装饰并从下拉框选 Original08 / Refined,以相同强度比较色温、左右重心与正文隔离。Refined 的“运动风格”可选 缓慢漂移 / 熔岩流动(默认),不新增配色预设。熔岩的“构图”默认 每次打开随机:每个新文档(包括刷新)只生成一次种子,旧局部模式两侧各自独立取 2–4 团软径向光斑,全背景额外各加入一团,共 6–10 团;尺寸、长宽比例、初始位置、24–40s 周期、负相位延迟和各关键帧的圆角、旋转、剪切、非均匀缩放均在有界范围变化。初态及真实轮廓都变化,不只是换位置。数量有概率重复,不保证相邻两次一定不同。只复用该侧两种已有 RGBA,多团重叠可能改变局部叠加深浅,但没有新色或基础 alpha 更改。“固定(原版)”在局部模式完整保留此前每侧两团及 24s/31s(左)、28s/35s(右)的精确 CSS 配方;宽域使用扩展轨迹,全背景使用四团及本次缓存曲线路径,不承诺与局部原版画面相同。“范围”默认 全背景(推荐),也可选 宽域,也可选 局部(旧范围)。宽域各团中心在父容器高度约 11–89% 间上下往返、横向跨越约 34–44% 可用留白;位移用实测父容器 CSS 像素与 calc(),不是光斑自身尺寸百分比。光斑保持可见中心,轻柔边缘淡出;越界轮廓始终由固定父层裁剪,不进入中央。切换范围保留控件焦点与同一缓存描述符,不重新抽种子;宽域与局部互切保留父子节点,跨入或离开全背景时取消旧动画并重建对应绘制层。局部加固定构图恢复旧 checkpoint 精确画面。Original08、漂移与静态的尺寸和配方不变。范围与构图只适用于 Refined 的动态熔岩;静态、漂移、Original08 时不可用。种子和描述符只保存在当前文档内存,不写 localStorage;强度、预设、动静态切换、尺寸观察、侧栏、PJAX/返回、pageshow、媒体及解密通知都不重抽,切回随机也恢复同一构图。独立 transform(拉伸、旋转、剪切)与 border-radius 形变使光斑交错靠近、重叠、分离。融合感来自软渐变叠加,不使用昂贵全屏 goo filter,不是整图平移或 opacity 呼吸。颜色 RGB 和基础 alpha 不变,无白色亮核。Original08 始终静态;Refined 的动态/静态按钮真实禁用 CSS 动画并恢复固定渐变,不只是改文案。动态与运动风格偏好在切换预设时保留,静态时隐藏全部熔岩子层并取消子动画,恢复原静态渐变;切回动态使用所选风格。重置恢复 Refined 动态熔岩、随机构图与全背景(不重新抽种子)。强度滑块从 0–100% 逐一调整装饰元素的真实 CSS opacity;右侧数字精确显示百分比,不是视觉估算。0% 是透明,不会更改开启状态。滑块输入不会重建控件,键盘焦点与连续方向键操作保留。

渲染与性能边界

开发对照模式的“渲染器”可在 PixiJS GPU(默认) / Canvas2D 对照 间切换,同一文档复用相同色团描述符。PixiJS 8.22.0 是本地固定版本的 MIT 组件,不从 CDN 动态加载。GPU 模式用自定义 WebGL shader 绘制原四种 RGBA、多段柔边、非对称轮廓与独立旋转、剪切、非均匀缩放;不降低分辨率、DPR、数量或帧率。Gaussian 联合遮罩在 GPU 以两个一维卷积 pass 生成,只在保护几何变化时更新;最终输出再次精确扣除文章核心,没有外部 SVG/CSS 全屏遮罩或每帧 Canvas2D 纹理上传。

Canvas2D 对照保持保存点的原生 DPR 缓存软纹理方案。GPU 模式不是对历史 CSS border-radius 动画的恢复,也不是未经验证的逐像素等价复制。Gaussian 使用 12px sigma、四倍 sigma 核半径;与浏览器 SVG 实现的边界采样仍需视觉比较。默认和重置均启用 PixiJS GPU;完整页面的硬件性能仍需对照,而 SwiftShader 软件后端的 GPU 路径明显更慢,开发对照模式可选择 Canvas2D。GPU 失败时安全关闭;开发对照模式可切回 Canvas2D;不会擅自修改浏览器或系统驱动。 ### 阅读区域优先

全背景开启时,header/nav、展开的 sidebar 和 footer 使用与正文相同的 4px 背景柔焦。只过滤独立背景层,文字、导航、目录和链接保持清晰;面板外沿以 16px 渐隐衔接,光场与背景格线可以连续穿过这些区域,不再扣除矩形孔洞。正文核心、搜索层和实验控件仍保持严格避让。关闭效果、减少透明度偏好或不支持 backdrop-filter 时恢复原来的不透明界面。

全背景动态熔岩使用一个完整视口绘制层,不分左右容器:错频二维平滑曲线与独立缓慢形变,沿横纵轴广泛移动;随机模式 6–10 团光斑、固定对照四团;四种原 RGBA 不变,默认强度为 80%。柔和多段椭圆 mask 在光斑边界前归零,不使用 goo 阈值。绘制前减去真实可见 .post-block、搜索界面及控件形状的联合核心孔洞;未启用玻璃背景时同时避让页头、侧栏和页脚(文章圆角同步保留);不依赖正文透明度或 z-index 掩盖。边界外侧以 18px 膨胀轮廓加 12px SVG Gaussian 模糊形成柔焦衔接,绘制前精确裁剪核心及 1.5px 抗锯齿保险带,不再使用旧全背景 26px 硬矩形间隙。Gaussian 模糊作用于遮罩边界,而非正文、投影文字或整屏光斑;不是替换配色、叠加白光或改正文 backdrop。滚动(包括 Lenis)、缩放、保护区 RO、PJAX 与解密事件更新遮罩,仅几何变化生成新 SVG。鼠标光标 class/style、HUD 投影文字和颜色 hover 不重建光层、不归零动画进度;真正的布局移动过渡期间安全暂停,结束后恢复同一节点及绘制进度。遮罩失效时关闭全背景。

旧模式装饰根据实际 main/content 矩形计算两侧可用留白,与阅读区域至少相隔 24px。Refined 漂移及局部熔岩单侧不超过 320px;宽域熔岩使用全部实测安全留白、顶部及底部各留视口高度 2%,不设 320px 上限。Original08 不超过最初 calc((100vw - 1160px) / 2) 的宽度。窗口缩放、浏览器缩放与侧栏布局改变会重新测量;内容移动过渡期间暂停装饰,而非在正文背后追逐它。

小于 1200px 的视口明确提示不可用;减少动态效果、高对比度、强制颜色和打印模式关闭装饰。开启选择可以保留,但状态说明不会把不可用的小屏幕描述为正在显示。

安全代码示例

1
2
const title = document.querySelector('.post-title');
console.log(title?.textContent.trim());

导航与目录

返回首页 · 阅读真实归档 · 本页目录定位

Hexo 官方文档(外链)

验证要点

切换后保留正文和链接语义;通过首页、归档和浏览器返回测试真实 PJAX 导航。导航发送、成功、错误、解密事件以及媒体偏好变化都会取消旧 CSS 动画、清理装饰与观察器;后台 visibilitychange 暂停动画,回到前台从原进度继续。尺寸观察只安排有界、事件驱动的一次测量;全背景仅在开启且可见时循环 RAF 绘制实际 Canvas 像素,动画帧不读取 DOM 矩形。打印使用可读原版布局。

视觉参考只取局部聚焦、同色深浅及柔和退场思路;慢流动为独立 CSS 实现,不采用鼠标互动:Evervault gradient mask · Gradient Topography。