--- title: CanvasRenderingContext2D.addHitRegion() slug: Web/API/CanvasRenderingContext2D/addHitRegion translation_of: Web/API/CanvasRenderingContext2D/addHitRegion ---
CanvasRenderingContext2D
.addHitRegion()
是 Canvas 2D API 给位图添加点击区域的方法。 它允许你很容易地实现一个点击区域, 让你触发 DOM 元素的事件, 去探索看不见的画布。
void ctx.addHitRegion(options);
options
参数是可选的。 当赋值时, {{jsxref("Object")}} 包含以下属性:
path
fillRule
id
parentID
cursor
inherit
")。 继承父点击区域的光标,或者canvas元素的光标。control
null。
label
null。
role
null
.addHitRegion
方法这是一段使用 addHitRegion 方法的简单的代码片段。
<canvas id="canvas"></canvas>
var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); canvas.addEventListener("mousemove", function(event){ if(event.region) { alert("ouch, my eye :("); } }); ctx.beginPath(); ctx.arc(100, 100, 75, 0, 2 * Math.PI, false); ctx.lineWidth = 5; ctx.stroke(); // eyes ctx.beginPath(); ctx.arc(70, 80, 10, 0, 2 * Math.PI, false); ctx.arc(130, 80, 10, 0, 2 * Math.PI, false); ctx.fill(); ctx.addHitRegion({id: "eyes"}); // mouth ctx.beginPath(); ctx.arc(100, 110, 50, 0, Math.PI, false); ctx.stroke();
修改下面的代码并在线查看canvas的变化(如果你没有看到全部的效果,请查看浏览器兼容性列表。如果你当前的浏览器支持点击区域,你需要激活偏好设置) 。
<canvas id="canvas" width="400" height="200" class="playable-canvas"></canvas> <div class="playable-buttons"> <input id="edit" type="button" value="Edit" /> <input id="reset" type="button" value="Reset" /> </div> <textarea id="code" class="playable-code" style="height:250px"> ctx.beginPath(); ctx.arc(100, 100, 75, 0, 2 * Math.PI, false); ctx.lineWidth = 5; ctx.stroke(); // eyes ctx.beginPath(); ctx.arc(70, 80, 10, 0, 2 * Math.PI, false); ctx.arc(130, 80, 10, 0, 2 * Math.PI, false); ctx.fill(); ctx.addHitRegion({id: "eyes"}); // mouth ctx.beginPath(); ctx.arc(100, 110, 50, 0, Math.PI, false); ctx.stroke();</textarea>
var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var textarea = document.getElementById("code"); var reset = document.getElementById("reset"); var edit = document.getElementById("edit"); var code = textarea.value; function drawCanvas() { ctx.clearRect(0, 0, canvas.width, canvas.height); eval(textarea.value); } reset.addEventListener("click", function() { textarea.value = code; drawCanvas(); }); edit.addEventListener("click", function() { textarea.focus(); }); canvas.addEventListener("mousemove", function(event){ if(event.region) { alert("ouch, my eye :("); } }); textarea.addEventListener("input", drawCanvas); window.addEventListener("load", drawCanvas);
{{ EmbedLiveSample('Playable_code', 700, 520) }}
Specification | Status | Comment |
---|---|---|
{{SpecName('HTML WHATWG', "scripting.html#dom-context-2d-addhitregion", "CanvasRenderingContext2D.addHitRegion")}} | {{Spec2('HTML WHATWG')}} | Initial definition. |
{{CompatibilityTable}}
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support |
{{CompatVersionUnknown}}[1] | {{CompatGeckoDesktop(30)}} [2] | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
id |
{{CompatVersionUnknown}}[1] | {{CompatGeckoDesktop(30)}} [2] | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
control |
{{CompatVersionUnknown}}[1] | {{CompatGeckoDesktop(30)}} [2] | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
path |
{{CompatVersionUnknown}}[1] | {{CompatGeckoDesktop(39)}} [2] | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
fillRule |
{{CompatVersionUnknown}}[1] | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
other hit region options | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{ CompatNo }} | {{ CompatNo }} | {{CompatGeckoMobile(30)}} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
id |
{{ CompatNo }} | {{ CompatNo }} | {{CompatGeckoMobile(30)}} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
control |
{{ CompatNo }} | {{ CompatNo }} | {{CompatGeckoMobile(30)}} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
path |
{{ CompatNo }} | {{ CompatNo }} | {{CompatGeckoMobile(39)}} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
fillRule |
{{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
other hit region options | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
ExperimentalCanvasFeatures
标志为 true
进行启用。canvas.hitregions.enabled
为true。