鼠标悬停卡片,Canvas 实时绘制光晕和粒子场。真实 DOM 内容与图形特效层叠合流。
Canvas 实时变换模拟界面贴合在圆柱曲面上,拖动感受 3D 透视。
开启扭曲后,表单持续施加非线性变换——真人仍可识别操作,脚本无法稳定定位元素。
SECURE · HTML-in-Canvas
Chrome Canary 实验性 API,开启 chrome://flags/#canvas-draw-element 后可用。
<!-- layoutsubtree 让子元素参与布局 --> <canvas layoutsubtree id="myCanvas" width="800" height="600"> <!-- 真实 DOM 子元素 --> <div id="ui-card" class="card"> <h2>Live HTML</h2> <input type="text" placeholder="可交互输入框"/> <button>按钮</button> </div> </canvas>
const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); const card = document.getElementById('ui-card'); // paint 事件: DOM 变化时触发 canvas.addEventListener('paint', (e) => { ctx.clearRect(0, 0, 800, 600); // 应用 WebGL 级别的变换 ctx.save(); ctx.transform(...cylinderMatrix); // 直接把真实 DOM 画进 canvas! ctx.drawElementImage(card, 0, 0); ctx.restore(); // 叠加 shader 后处理 applyGlassRefraction(ctx); });