CanvasRenderingContext2D
.drawFocusIfNeeded()
method of the Canvas 2D API draws a focus ring around the current or given path, if the specified element is focused.
void ctx.drawFocusIfNeeded(element); void ctx.drawFocusIfNeeded(path, element);
element
The element to check whether it is focused or not.
path
Path2D
path to use.
This example draws two buttons on a canvas. The
drawFocusIfNeeded()
method is used to draw a focus ring when appropriate.
<canvas id="canvas"> <button id="button1">Continue</button> <button id="button2">Quit</button> </canvas>
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const button1 = document.getElementById('button1');
const button2 = document.getElementById('button2');
document.addEventListener('focus', redraw, true);
document.addEventListener('blur', redraw, true);
canvas.addEventListener('click', handleClick, false);
redraw();
function redraw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawButton(button1, 20, 20);
drawButton(button2, 20, 80);
}
function handleClick(e) {
// Calculate click coordinates
const x = e.clientX - canvas.offsetLeft;
const y = e.clientY - canvas.offsetTop;
// Focus button1, if appropriate
drawButton(button1, 20, 20);
if (ctx.isPointInPath(x, y)) {
button1.focus();
}
// Focus button2, if appropriate
drawButton(button2, 20, 80);
if (ctx.isPointInPath(x, y)) {
button2.focus();
}
}
function drawButton(el, x, y) {
const active = document.activeElement === el;
const width = 150;
const height = 40;
// Button background
ctx.fillStyle = active ? 'pink' : 'lightgray';
ctx.fillRect(x, y, width, height);
// Button text
ctx.font = '15px sans-serif';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillStyle = active ? 'blue' : 'black';
ctx.fillText(el.textContent, x + width / 2, y + height / 2);
// Define clickable area
ctx.beginPath();
ctx.rect(x, y, width, height);
// Draw focus ring, if appropriate
ctx.drawFocusIfNeeded(el);
}
| 规范 | 状态 | 注释 |
|---|---|---|
|
HTML 实时标准
The definition of 'CanvasRenderingContext2D.drawFocusIfNeeded' in that specification. |
实时标准 | 初始定义 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
drawFocusIfNeeded
|
Chrome Yes | Edge 14 |
Firefox
32
|
IE No | Opera Yes | Safari Yes | WebView Android Yes | Chrome Android Yes |
Firefox Android
32
|
Opera Android Yes | Safari iOS Yes | Samsung Internet Android Yes |
路径
参数
|
Chrome Yes | Edge ≤79 | Firefox No | IE No | Opera Yes | Safari Yes | WebView Android Yes | Chrome Android Yes | Firefox Android No | Opera Android Yes | Safari iOS Yes | Samsung Internet Android Yes |
完整支持
不支持
用户必须明确启用此特征。
使用非标名称。
CanvasRenderingContext2D
CanvasRenderingContext2D
addHitRegion()
arc()
arcTo()
beginPath()
bezierCurveTo()
clearHitRegions()
clearRect()
clip()
closePath()
createImageData()
createLinearGradient()
createPattern()
createRadialGradient()
drawFocusIfNeeded()
drawImage()
drawWidgetAsOnScreen()
drawWindow()
ellipse()
fill()
fillRect()
fillText()
getImageData()
getLineDash()
getTransform()
isPointInPath()
isPointInStroke()
lineTo()
measureText()
moveTo()
putImageData()
quadraticCurveTo()
rect()
removeHitRegion()
resetTransform()
restore()
rotate()
save()
scale()
scrollPathIntoView()
setLineDash()
setTransform()
stroke()
strokeRect()
strokeText()
transform()
translate()