HTML5 Javascript Canvas : Rectangular Collision
Tags: javascript, webdev, canvas
Published: 2022-02-11 11:31:17

Финал
[jsfiddle.net](https://jsfiddle.net/Spsoi/uv4pknxt/10/)

```javascript
canvas = document.querySelector('#canvas');
let c = canvas.getContext('2d');

canvas.width = innerWidth;
canvas.height = innerHeight;

let mouse = {
    x: innerWidth / 2,
    y: innerHeight / 2
}

let colors = [
    '#2185c5',
    '#7ECEFD',
    '#FFF6E5',
    '#FF7F66'
];

document.addEventListener("mousemove", function(event){
    mouse.x = event.clientX;
    mouse.y = event.clientY;
});

function animate() {
    requestAnimationFrame(animate);
    c.fillStyle = '#1A1A23';
    c.fillRect(0, 0, canvas.width, canvas.height);

    let blueRectanglesX = canvas.width / 2 - 50;
    let blueRectanglesY = canvas.height / 2 - 50;
    if (mouse.x + 100 >= blueRectanglesX &&  // обнаружение пересечение слева
        mouse.x <= blueRectanglesX + 100 &&  // обнаружение пересечение справа
        mouse.y + 100 >= blueRectanglesY && // !* обнаружение пересечение сверх
        mouse.y <= blueRectanglesY + 100// !* обнаружение пересечение снизу
        ) {
        console.log('Пересечение');
    }

    // red
    c.fillStyle = '#E86262';
    c.fillRect(mouse.x, mouse.y, 100, 100);

    // blue
    c.fillStyle = '#92ABEA';
    c.fillRect(canvas.width / 2 - 50, canvas.height / 2 - 50, 100, 100);

}

animate();
```

Отслеживаем пересечение снизу и сверху

[jsfiddle.net](https://jsfiddle.net/Spsoi/uv4pknxt/9/)

```javascript
function animate() {
    requestAnimationFrame(animate);
    c.fillStyle = '#1A1A23';
    c.fillRect(0, 0, canvas.width, canvas.height);

    if (mouse.x + 100 >= canvas.width / 2 - 50 &&  // обнаружение пересечение слева
        mouse.x <= canvas.width / 2 - 50 + 100 &&  // обнаружение пересечение справа
        mouse.y + 100 >= canvas.height / 2 - 50 && // !* обнаружение пересечение сверх
        mouse.y <= canvas.height / 2 - 50 + 100// !* обнаружение пересечение снизу
        ) {
        console.log('Пересечение');
    }

    // red
    c.fillStyle = '#E86262';
    c.fillRect(mouse.x, mouse.y, 100, 100);

    // blue
    c.fillStyle = '#92ABEA';
    c.fillRect(canvas.width / 2 - 50, canvas.height / 2 - 50, 100, 100);

}
```

Отслеживаем пересечение справа.

[jsfiddle.net](https://jsfiddle.net/Spsoi/uv4pknxt/3/)

```javascript
function animate() {
    requestAnimationFrame(animate);
    c.fillStyle = '#1A1A23';
    c.fillRect(0, 0, canvas.width, canvas.height);

    if (mouse.x + 100 >= canvas.width / 2 - 50 &&  // обнаружение пересечение слева
        mouse.x <= canvas.width / 2 - 50 + 100 ) { // !* обнаружение пересечение справа
        console.log('Чпоньк');
    }

    // red
    c.fillStyle = '#E86262';
    c.fillRect(mouse.x, mouse.y, 100, 100);

    // blue
    c.fillStyle = '#92ABEA';
    c.fillRect(canvas.width / 2 - 50, canvas.height / 2 - 50, 100, 100);

}
```

Отслеживаем пересечение слева.
[jsfiddle.net](https://jsfiddle.net/Spsoi/uv4pknxt/3/)

```javascript
function animate() {
    requestAnimationFrame(animate);
    c.fillStyle = '#1A1A23';
    c.fillRect(0, 0, canvas.width, canvas.height);

    if (mouse.x + 100 >= canvas.width / 2 - 50) { // !* обнаружение пересечение слева
        console.log('Чпоньк');
    }

    // red
    c.fillStyle = '#E86262';
    c.fillRect(mouse.x, mouse.y, 100, 100);

    // blue
    c.fillStyle = '#92ABEA';
    c.fillRect(canvas.width / 2 - 50, canvas.height / 2 - 50, 100, 100);

}
```

Отрисуем два квадрата

[jsfiddle.net](https://jsfiddle.net/Spsoi/uv4pknxt/2/)

canvas.js
```javascript
canvas = document.querySelector('#canvas');
let c = canvas.getContext('2d');

canvas.width = innerWidth;
canvas.height = innerHeight;

let mouse = {
    x: innerWidth / 2,
    y: innerHeight / 2
}

let colors = [
    '#2185c5',
    '#7ECEFD',
    '#FFF6E5',
    '#FF7F66'
];

document.addEventListener("mousemove", function(event){
    mouse.x = event.clientX;
    mouse.y = event.clientY;
});

function animate() {
    requestAnimationFrame(animate);
    c.fillStyle = '#1A1A23';
    c.fillRect(0, 0, canvas.width, canvas.height);

    c.fillStyle = '#E86262';
    c.fillRect(mouse.x, mouse.y, 100, 100);

    c.fillStyle = '#92ABEA';
    c.fillRect(canvas.width / 2 - 50, canvas.height / 2 - 50, 100, 100);

}

animate();
```
style.css
```css
canvas {
    border: 1px solid #000;
}
```

index.html
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <canvas id="canvas" width="300" height="300"></canvas>
    <script  src="canvas.js" ></script>
</body>
</html>
```