# HTML Canvas isPointInPath() Method
The `isPointInPath()` method of the Canvas 2D API is a powerful built-in tool used to determine whether a specified point lies within the boundaries of the current path. It returns a boolean value: `true` if the point is inside the path, and `false` otherwise.
This method is essential for implementing interactive canvas elements, such as hit detection, clickable shapes, and custom drag-and-drop interfaces.
---
## Syntax
```javascript
context.isPointInPath(x, y);
context.isPointInPath(x, y, fillRule);
context.isPointInPath(path, x, y);
context.isPointInPath(path, x, y, fillRule);
```
### Parameter Values
| Parameter | Type | Description |
| :--- | :--- | :--- |
| `x` | Number | The x-coordinate of the point to test. |
| `y` | Number | The y-coordinate of the point to test. |
| `fillRule` *(Optional)* | String | The algorithm to determine if a point is inside or outside the path.
β’ `"nonzero"`: The non-zero winding rule (default).
β’ `"evenodd"`: The even-odd winding rule. |
| `path` *(Optional)* | Path2D | A `Path2D` object to test against. If not specified, the current default path is used. |
### Return Value
* **`true`**: If the specified point `(x, y)` is located inside the boundary of the path.
* **`false`**: If the point is outside the path.
---
## Code Examples
### Example 1: Basic Hit Detection
This example draws a rectangle and checks if the point `(20, 50)` is inside it. If it is, the rectangle's border is stroked.
```html
```
### Example 2: Interactive Click Detection (Hit Test)
You can use `isPointInPath()` inside an event listener to detect when a user clicks on a specific shape.
```javascript
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
// Create a circular path
ctx.arc(150, 75, 50, 0, 2 * Math.PI);
ctx.fillStyle = 'blue';
ctx.fill();
// Listen for click events on the canvas
canvas.addEventListener('click', function(event) {
// Get click coordinates relative to the canvas
const rect = canvas.getBoundingClientRect();
const x = event.clientX - rect.left;
const y = event.clientY - rect.top;
// Check if the click was inside the circle
if (ctx.isPointInPath(x, y)) {
alert('You clicked inside the circle!');
} else {
alert('You clicked outside the circle.');
}
});
```
---
## Key Considerations
### 1. Coordinate System Alignment
The coordinates passed to `isPointInPath(x, y)` must be relative to the canvas element's coordinate system, not the viewport. If you are using mouse or touch events, you must convert the client coordinates (`clientX`, `clientY`) to canvas-relative coordinates.
### 2. The "Current Path" Behavior
`isPointInPath()` checks the **current** path. If you draw multiple shapes using the default path, `isPointInPath()` will only check the most recently defined path unless you use `beginPath()` to separate them, or use `Path2D` objects.
### 3. Using Path2D for Multiple Shapes
If you need to manage hit detection for multiple distinct shapes, it is highly recommended to use `Path2D` objects. This allows you to store paths in variables and test against them individually:
```javascript
const circlePath = new Path2D();
circlePath.arc(50, 50, 30, 0, 2 * Math.PI);
const rectPath = new Path2D();
rectPath.rect(150, 20, 100, 60);
// Test against specific Path2D objects
if (ctx.isPointInPath(circlePath, 50, 50)) {
// Point is inside the circle
}
```
---
## Browser Support
The `isPointInPath()` method is widely supported across all modern web browsers:
* Google Chrome
* Mozilla Firefox
* Microsoft Edge / Internet Explorer 9+
* Safari
* Opera
*Note: Internet Explorer 8 and earlier versions do not support the `
π Categories
- β‘ JavaScript (1589)
- π PHP (872)
- π Python3 (810)
- π HTML (691)
- βοΈ C# (650)
- π Python (594)
- β Java (552)
- βοΈ PyTorch (534)
- π§ Linux (472)
- βοΈ C (432)
- π¦ jQuery (406)
- π¨ CSS (377)
- π XML (259)
- π¦ jQuery UI (231)
- π― Bootstrap (220)
- βοΈ C++ (215)
- π °οΈ Angular (205)
- π HTML DOM (201)
- π΄ Redis (188)
- π Web Building (142)
- π Vue.js (141)
- π R (131)
- πΌ Pandas (124)
- ποΈ SQL (105)
- βοΈ Docker (86)
- βοΈ TypeScript (73)
- βοΈ Highcharts (70)
- π AI Agent (70)
- βοΈ React (68)
- π Node.js (65)
- βοΈ Machine Learning (60)
- π Git (59)
- π΅ Go (58)
- π Markdown (58)
- π’ NumPy (55)
- π§ͺ Flask (54)
- βοΈ Scala (53)
- ποΈ SQLite (52)
- π JSTL (52)
- βοΈ VS Code (51)
- π MongoDB (49)
- π Perl (48)
- π Ruby (47)
- π Matplotlib (47)
- βοΈ Uncategorized (46)
- π Swift (46)
- ποΈ PostgreSQL (46)
- βοΈ Data Structures (46)
- π Playwright (46)
- π iOS (45)
- ποΈ MySQL (44)
- βοΈ LangChain (43)
- π FastAPI (40)
- βοΈ Ionic (38)
- π Design Patterns (37)
- βοΈ Eclipse (37)
- π¨ CSS3 (34)
- π Lua (34)
- βοΈ Codex (34)
- πΈ Django (32)
- βοΈ OpenCV (32)
- π Rust (31)
- π JSP (31)
- βοΈ Claude Code (31)
- π Pillow (30)
- βοΈ OpenCode (28)
- π AI Skills (27)
- π Flutter (26)
- π Maven (26)
- π¨ Tailwind CSS (25)
- π§ TensorFlow (25)
- π Servlet (24)
- π Dart (23)
- π Assembly (23)
- βοΈ Memcached (22)
- βοΈ SVG (22)
- βοΈ Electron (22)
- π NLP (22)
- π Regex (21)
- π Android (20)
- π£ Kotlin (19)
- π Julia (19)
- π SOAP (17)
- π Selenium (17)
- π PowerShell (17)
- π Sass (16)
- π HTTP (16)
- π Zig (15)
- π AI (15)
- π AJAX (14)
- π Swagger (14)
- βοΈ Scikit-learn (13)
- βοΈ ECharts (13)
- βοΈ Chart.js (13)
- βοΈ Cursor (13)
- βοΈ SciPy (12)
- π RDF (12)
- π Ollama (12)
- π Next.js (12)
- π Plotly Dash (12)
- π JSON (11)
- π RESTful API (11)
- π WSDL (9)
- βοΈ CMake (8)
- π Firebug (7)
- π Nginx (6)
- βΈοΈ Kubernetes (6)
- π Jupyter (6)
- π LaTeX (4)
- π UniApp (4)
- ποΈ SQL Server (1)
YouTip