Files
what-new-in-chrome/public/html-in-canvas/index.html
T

116 lines
4.8 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>HTML-in-Canvas API Demo</title>
<link rel="stylesheet" href="./styles.css" />
</head>
<body>
<main class="page-shell">
<section class="intro" aria-labelledby="page-title">
<p class="eyebrow">Chrome Origin Trial Demo</p>
<h1 id="page-title">HTML-in-Canvas API</h1>
<p class="lede">
这个页面基于 WICG 官方示例改写,演示把真实 DOM 表单绘制进
<code>&lt;canvas&gt;</code>,同时保留输入、选择、滑块和按钮的交互能力。
</p>
<div class="status-panel" id="support-status" role="status">
正在检测当前浏览器是否支持实验 API...
</div>
</section>
<section class="demo-grid" aria-label="HTML-in-Canvas 演示">
<div class="canvas-stage">
<canvas id="canvas" width="638" height="318" layoutsubtree="true">
<div id="draw-element" class="control-panel">
<form id="demo-form" action="#" method="get">
<fieldset>
<legend>飞船控制台</legend>
<label class="field-row" for="ship-name">
<span>飞船名称</span>
<input type="text" id="ship-name" value="Canvas 远航者" />
</label>
<label class="check-row" for="hyperdrive">
<input type="checkbox" id="hyperdrive" checked />
<span>启动超空间引擎</span>
</label>
<fieldset class="nested-fieldset">
<legend>目标星系</legend>
<label class="check-row" for="alpha">
<input type="radio" id="alpha" name="system" value="alpha" checked />
<span>半人马座 Alpha</span>
</label>
<label class="check-row" for="beta">
<input type="radio" id="beta" name="system" value="beta" />
<span>参宿四 Betelgeuse</span>
</label>
</fieldset>
<label class="field-row" for="shield-level">
<span>护盾强度</span>
<input type="range" id="shield-level" min="0" max="100" value="75" />
</label>
<button type="submit">发射</button>
</fieldset>
</form>
</div>
</canvas>
<div class="fallback-preview" aria-hidden="true">
<p class="fallback-label">当前浏览器未启用实验 API,下面显示同一 DOM 表单的静态预览。</p>
<div class="control-panel preview-panel">
<fieldset>
<legend>飞船控制台</legend>
<label class="field-row">
<span>飞船名称</span>
<input type="text" value="Canvas 远航者" disabled />
</label>
<label class="check-row">
<input type="checkbox" checked disabled />
<span>启动超空间引擎</span>
</label>
<fieldset class="nested-fieldset">
<legend>目标星系</legend>
<label class="check-row">
<input type="radio" name="preview-system" checked disabled />
<span>半人马座 Alpha</span>
</label>
<label class="check-row">
<input type="radio" name="preview-system" disabled />
<span>参宿四 Betelgeuse</span>
</label>
</fieldset>
<label class="field-row">
<span>护盾强度</span>
<input type="range" min="0" max="100" value="75" disabled />
</label>
<button type="button" disabled>发射</button>
</fieldset>
</div>
</div>
</div>
<aside class="notes" aria-label="运行说明">
<h2>运行条件</h2>
<p>
Chrome 官方文章说明:该 API 在 Chrome 148-150 处于源试用阶段,本地测试需要
Chrome Canary 149+,并开启 <code>chrome://flags/#canvas-draw-element</code>。
</p>
<h2>可验证点</h2>
<ul>
<li>表单控件来自真实 DOM,不是 canvas 手绘控件。</li>
<li>输入框、复选框、单选项、滑块和按钮可直接操作。</li>
<li>JS 每次 paint 后同步 DOM transform,让命中区域与 canvas 绘制位置对齐。</li>
</ul>
</aside>
</section>
</main>
<script src="./app.js" type="module"></script>
</body>
</html>