用途:这是一套围绕实验性 HTML-in-Canvas API(drawElementImage)的知识包,用于把存活的 DOM 拍摄成 canvas 像素,并在 canvas、WebGL、three.js 中做自由变形与交互。资料验证日期为 2026-08-20,环境为 Chrome Canary 开启 chrome://flags/#canvas-draw-element。该 API 属实验性,不同构建的名称、签名与行为可能不同。
主要能力与用法:拍摄只能写在源 canvas 的 paint 事件处理器内,rAF 中仅用 src.requestPaint?.() 发起请求;需按 (el,x,y)、(el,x,y,w,h)、(el) 三种签名依次尝试并汇总失败原因。源 canvas 隐藏只能用 position:absolute; z-index:-1 叠加,禁用 display:none、visibility:hidden、left:-9999px。捕获的 canvas 已受污染,禁止 getImageData/toDataURL。源元素须是带 layoutsubtree 属性的所属 canvas 的子元素。所有实验 API 调用需放在特性检测之后,不支持时提示 Chrome Canary + 标志要求。
交互有三条路径:把 drawElementImage 返回的 transform 回写到 el.style.transform(仅平面布局);使用 setHitTestRegions()/fireOnEveryPaint(可能不存在);变形场景下手动转发坐标与事件,覆盖 input、select、checkbox、button、contenteditable、滚动容器与 dialog。three.js 集成走 源 canvas → CanvasTexture → 每帧 texture.needsUpdate;NPOT 需 LinearFilter 且关闭 mipmaps;点击用 Raycaster 的 uv 换算回坐标。
限制:实验 API 名称与行为随构建变化;不支持该 API 的普通浏览器无法使用;行内选择器与悬停需自行补齐样式类;示例 WebGL 直接上传需按 texElementImage2D 新→旧签名回退。