1
resposta

Desenhando com o mouse com infinitas cores

Boa noite pessoal! Compartilhando meu código da solução!

<!DOCTYPE html>
<html lang="pt_BR">

<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">

    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
        }

        #main {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            border: 3px double brown;
            padding: 25px;
            box-shadow: 0 0 20px rgba(0, 0, 0, 0.6);
        }

        #main h1,
        h3 {
            margin-bottom: 5px;
            color: brown;
        }

        canvas {
            background-color: lightgray;
            scale: (0.1);
            animation: .8s ease-in-out 0s 1 normal both running aparecimento
        }

        #tools {
            margin-top: 5px;
            gap: 5px;
            display: flex;
            flex-direction: row;
            align-items: center;
            justify-content: space-around;
            width: 100%;
        }

        #tools div {
            gap: 5px;
            display: flex;
            flex-direction: row;
            align-items: center;
            justify-content: center;
        }

        @keyframes aparecimento {
            from {
                transform: scale(0.1);
            }

            to {
                transform: scale(1.0);

            }
        }
    </style>

    <title>Lógica de Programação II</title>
</head>

<body>
    <div id="main">
        <h1>03 - Interagindo com o usuário</h1>
        <h3>09 - Desenhando com o mouse com infinitas cores</h3>

        <canvas width="600" height="400" onclick="drawCircle"></canvas>

        <div id="tools">
            <span id="size_circle"></span>
            <span>Shift + | Alt -</span>
            <div>
                <label for="color_palette">Escolha uma cor:</label>
                <input type="color" name="color_palette" id="color_palette" value="#0000ff">
            </div>
        </div>
    </div>

    <script>

        // Declaração das constantes.
        const canvas = document.querySelector("canvas");
        const context = canvas.getContext("2d");
        const colors = ["blue", "red", "green"];

        // Declaração das variáveis.
        var radiusCircle = 10;
        var mouseButtonPressed = false;

        // Função responsável por devolver os valores das coordenadas do canvas.
        function coordinates(e) {
            return [e.pageX - canvas.offsetLeft, e.pageY - canvas.offsetTop];
        }

        // Função responsável por desenhar círculos coloridos na tela.
        function drawCircle(e) {
            let [x, y] = coordinates(e);

            if (e.shiftKey && radiusCircle < 40) {
                radiusCircle = radiusCircle + 10;
                updateTagSizeCircle();
            }

            if (e.altKey && radiusCircle > 10) {
                radiusCircle = radiusCircle - 5;
                updateTagSizeCircle();
            }

            context.fillStyle = document.getElementById("color_palette").value;
            context.beginPath();
            context.arc(x, y, radiusCircle, 0, 2 * Math.PI);
            context.fill();
        }

        // Função responsável por desenhar na tela enquanto o mouse se movimenta
        // e o botão esquerdo está pressionado. 
        function draw(e) {
            if (mouseButtonPressed) {
                drawCircle(e);
            }
        }

        function updateTagSizeCircle() {
            document.getElementById("size_circle").innerHTML = "Tamanho do círculo: " + radiusCircle;
        }

        // Definição dos eventos ao ser realizar cliques do mouse sobre o canvas.
        canvas.onclick = drawCircle;
        canvas.onmousemove = draw;
        canvas.onmousedown = () => { mouseButtonPressed = true; };
        canvas.onmouseup = () => { mouseButtonPressed = false; };

        updateTagSizeCircle();

    </script>
</body>

</html>
1 resposta

Olá, Wesley! Como vai?

Ficou com alguma dúvida durante a resolução?

Caso tenha ficado não deixe de compartilhar com a gente.

Continue praticando, bons estudos e até mais!