@Electro-max

Почему не очищается Canvas при использовании clearRect?

Есть две функции, одна рисует красный квадрат, другая зеленый. При старте запущена функция с красным квадратом, нажав на него запускается вторая функция и вызывается очистка канвас. По идее должен пропасть красный квадрат и отрисоваться зеленый, а при нажатии на зеленый он затрется и вызовется красный. Но отрисованы два квадрата - почему? Как сделать, чтобы канвас полностью очистился от первой функции до белого экрана и запустилась вторая функция и наоборот?
Код 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">
    <title>Document</title>
</head>
<body>
<canvas id="canvas" width = 1000 height = 620 style = "border: 1px solid #000000;"></canvas>
</body>
</html>

Код javascript
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

let clearCanvas = function() {
ctx.clearRect(0, 0, canvas.width, canvas.height); 
};

let launchLayerOne = function() {
        canvas.style.background = 'black';
        ctx.rect(50, 50, 100, 100);
        ctx.fillStyle = 'rgba(247, 7, 7, 0.8)';
        ctx.fill()

        canvas.onmousedown = function(e) {
        let rect = this.getBoundingClientRect();
        x = e.clientX - rect.left;
        y = e.clientY - rect.top;
        let detect
        ctx.isPointInPath(x, y) ? detect = 1 : detect = 0;
        if(detect === 1) {
        clearCanvas();
        launchLayerTwo();
        }
        };
};
    launchLayerOne()

let launchLayerTwo = function() {
        canvas.style.background = 'grey';
        ctx.rect(250, 50, 100, 100);
        ctx.fillStyle = 'rgba(13, 171, 10, 0.8)';
        ctx.fill()
    
        canvas.onmousedown = function(e) {
        let rect = this.getBoundingClientRect();
        x = e.clientX - rect.left;
        y = e.clientY - rect.top;
        let detect
        ctx.isPointInPath(x, y) ? detect = 1 : detect = 0;
        if(detect === 1) {
            clearCanvas();
            launchLayerOne();
        }
        };
    };
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы