CanvasRenderingContext2D: метод isPointInPath()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод CanvasRenderingContext2D.isPointInPath() API холста 2D сообщает, содержится ли указанная точка в текущей траектории.
Синтаксис
isPointInPath(x, y) isPointInPath(x, y, fillRule) isPointInPath(path, x, y) isPointInPath(path, x, y, fillRule)
Параметры
x-
Координата x точки для проверки, не подверженная текущему преобразованию контекста.
y-
Координата y точки для проверки, не подверженная текущему преобразованию контекста.
fillRule-
Алгоритм определения, находится ли точка внутри или вне траектории. Возможные значения:
path-
Траектория
Path2Dдля проверки. Если не указано, используется текущая траектория.
Возвращаемое значение
- Булево значение
-
Булево значение, равное
true, если указанная точка содержится в текущей или указанной траектории, в противном случаеfalse.
Примеры
Проверка точки в текущей траектории
В этом примере используется метод isPointInPath() для проверки, находится ли точка внутри текущей траектории.
HTML
<canvas id="canvas"></canvas> <p>In path: <code id="result">false</code></p>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const result = document.getElementById("result");
ctx.rect(10, 10, 100, 100);
ctx.fill();
result.innerText = ctx.isPointInPath(30, 70);
Результат
Проверка точки в указанной траектории
В этом примере при перемещении мыши проверяется, находится ли курсор внутри круговой Path2D траектории. Если да, круг становится зелёным, иначе — красным.
HTML
<canvas id="canvas"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
// Create circle
const circle = new Path2D();
circle.arc(150, 75, 50, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill(circle);
// Listen for mouse moves
canvas.addEventListener("mousemove", (event) => {
// Check whether point is inside circle
const isPointInPath = ctx.isPointInPath(circle, event.offsetX, event.offsetY);
ctx.fillStyle = isPointInPath ? "green" : "red";
// Draw circle
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fill(circle);
});
Результат
Спецификации
| Спецификация |
|---|
| HTML # dom-context-2d-ispointinpath-dev |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
isPointInPath |
1 | 12 | 2 | ≤12.1 | 3.1 | 18 | 4 | ≤12.1 | 2 | 1.0 | 4.4 |
path_parameter |
36 | 14 | 31 | 23 | 7 | 36 | 31 | 24 | 7 | 3.0 | 37 |
Примечание для Gecko
- До Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4) этот метод неправильно не умножал координаты заданной точки на текущую матрицу преобразования перед сравнением с траекторией. Сейчас метод работает правильно, даже если контекст повернут, масштабирован или преобразован другим способом.
См. также
- Интерфейс, определяющий этот метод:
CanvasRenderingContext2D
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInPath