Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Solução código - DesenhaCirculo ( teclas Shift / Alt / Ctrl)

Olá pessoal,

Como a ideia é logica, tentei neste exercício eliminar todas as possibilidades para realizar a tarefa com as 3 teclas (Shift, Alt e Crtl). Não sei se daria para enxugar mais o código para realizar a tarefa interagindo junto com o usuário.

<h1>..:: Desenha Circulo ::..</h1>
<canvas id="tela" width="600" height="400"></canvas>
<h3>Status</h3>
<table>
    <tr>
        <td>Cor do circulo em HEX (<font color="red">botão direito</font>)</td>
        <td><input id="cor" size="4" value="#0000FF"></td>
    </tr>
    <tr>
        <td>Incremento <font color="red">SHIFT</font> /Decremento <font color="red">ALT ou CTRL</font></td>
        <td><input id="botaoShiftAlt" size="4" value="5"></td>
    </tr>
    <tr>
        <td>Valor atual do <font color="red">raio</font></td>
        <td><input id="valorRaio" size="4" value="10"></td>
    </tr>
</table>

<script>
    var tela = document.getElementById('tela');
    var lapis = tela.getContext('2d');

    lapis.fillStyle = 'grey';
    lapis.fillRect(0, 0, 600, 400);

    var corHexa = '#';

    //Valor padrão do raio
    var raio = document.getElementById('valorRaio');
    console.log(raio);
    raio = parseInt(raio.value);
    console.log(raio)

    function corCirculo() {
        var hexadecimais = '0123456789ABCDEF';
        corHexa = '#';

        for (var i = 0; i < 6; i++ ) {
            corHexa += hexadecimais[Math.floor(Math.random() * 16)];
        }

        document.getElementById('cor').value = corHexa;

        return false;
    }

    tela.oncontextmenu = corCirculo;

    function desenhaCirculo(evento) {

        //Cor do circulo
        var corCirculo = document.getElementById('cor').value;
        console.log(corCirculo);

        //Valor do incremento para o botao Shift
        var botaoShiftAlt = document.getElementById('botaoShiftAlt');
        console.log(botaoShiftAlt)
        botaoShiftAlt = parseInt(botaoShiftAlt.value);
        console.log(botaoShiftAlt)

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        lapis.fillStyle = corCirculo;
        lapis.beginPath();

        var raioAnterior = raio;
        //Variavel que indica se ira desenhar o circulo
        var sai = false;

        if ( (evento.altKey == true && evento.ctrlKey == true) || (evento.ctrlKey == true && evento.shiftKey) || (evento.altKey == true && evento.shiftKey) ) {
            alert('Atenção só é permitido aperta uma tecla...');
            sai = true;
        } else if (evento.altKey == true  || evento.ctrlKey == true ) {
            raio -= botaoShiftAlt;
        } else if (evento.shiftKey == true) {
            raio += botaoShiftAlt;
        }

        console.log(raio);

        if (sai == false) {
            if (raio > 40) { 
                alert('Atenção!!!\nRaio ultrapassou 40.');
                raio = raioAnterior;
            } else if (raio <= 0) {
                alert('Atenção!!!\nRaio inferior a 0.');
                raio = raioAnterior;
            } else {
                lapis.arc(x, y, raio, 0, 2 * 3.14);
                lapis.fill();
                console.log(x + ',' + y);
            }
        }

        document.getElementById('valorRaio').value = raio;
    }

    tela.onclick = desenhaCirculo;
</script>
1 resposta
solução!

Legal, Fábio! :)