SVGGeometryElement:isPointInFill() 方法
SVGGeometryElement.isPointInFill()
方法确定给定点是否在元素的填充形状内。应用正常的命中测试规则;元素上 pointer-events
属性的值决定了是否将某个点视为在填充内。point
参数被解释为元素本地坐标系中的一个点。
语法
js
isPointInFill(point)
参数
point
-
一个被解释为元素本地坐标系中的点的 DOMPointInit 对象。
返回值
一个布尔值,指示给定点是否在填充内。
示例
SVG
html
<svg
viewBox="0 0 100 100"
width="150"
height="150"
xmlns="http://www.w3.org/2000/svg">
<circle
id="circle"
cx="50"
cy="50"
r="45"
fill="white"
stroke="black"
stroke-width="10" />
</svg>
JavaScript
js
const svg = document.getElementsByTagName("svg")[0];
const circle = document.getElementById("circle");
const points = [
["10", "10"],
["40", "30"],
["70", "40"],
["15", "75"],
["83", "83"],
];
for (const point of points) {
let isPointInFill;
try {
const pointObj = new DOMPoint(point[0], point[1]);
isPointInFill = circle.isPointInFill(pointObj);
} catch (e) {
// Fallback for browsers that don't support DOMPoint as an argument
const pointObj = svg.createSVGPoint();
pointObj.x = point[0];
pointObj.y = point[1];
isPointInFill = circle.isPointInFill(pointObj);
}
console.log(`Point at ${point[0]},${point[1]}: ${isPointInFill}`);
const pointEl = document.createElementNS(
"http://www.w3.org/2000/svg",
"circle",
);
pointEl.style.cx = point[0];
pointEl.style.cy = point[1];
pointEl.style.r = 5;
pointEl.style.fill = isPointInFill ? "seagreen" : "rgb(255 0 0 / 50%)";
svg.appendChild(pointEl);
}
结果
规范
规范 |
---|
可缩放矢量图形 (SVG) 2 # __svg__SVGGeometryElement__isPointInFill |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。