Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Evento com a tecla ALT não funciona

Ao clicar na área do canvas com a tecla ALT pressionada, nada ocorre, parece que o mouse fica "bloqueado", assim não consigo diminuir o raio nem utilizar a função desenhaCirculo() com o raio atual.Fiz um teste com outra tecla e o código funcionou (tecla CTRL).

Obs.: Quando aperto as duas teclas juntas o alerta é mostrado normalmente.

Estou utilizando o UBUNTU 16.04 e o erro ocorre tanto no Google Chrome como no Firefox. Segue o código abaixo:

<canvas id="tela" width="600" height="400"></canvas>
<canvas id="indicador_cor" width="50" height="50"></canvas>

<button>Limpar Tela</button>

<script>
    var tela = document.querySelector("#tela");
    var pincel = tela.getContext("2d");

    var indicadorCor = document.querySelector("#indicador_cor");
    var pincelIndicadorCor = indicadorCor.getContext("2d");
    pincelIndicadorCor.fillStyle = "blue";
    pincelIndicadorCor.fillRect(0, 0, 50, 50);

    var button = document.querySelector("button");

    pincel.fillStyle = "gray";
    pincel.fillRect(0, 0, 600, 400);
    pincel.fillStyle = "blue";

    function desenhaCirculo(evento) {
        // console.log(evento);
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        // console.log("Cliquei nas coordenadas:\nx = " + x + " e y = " + y);
        pincel.fillStyle = cores[posicao];
        pincel.beginPath();
        if (evento.shiftKey && evento.altKey) {
            alert("Utilizar uma tecla de cada vez!");
        } else if (evento.shiftKey && raio + adicional <= 40) {
            raio = raio + adicional;
        } else if (evento.altKey && raio - adicional >= 10) {
            raio = raio - adicional;
        }
        // if (evento.shiftKey && evento.ctrlKey) {
        //     alert("Utilizar uma tecla de cada vez!");
        // } else if (evento.shiftKey && raio + adicional <= 40) {
        //     raio = raio + adicional;
        // } else if (evento.ctrlKey && raio - adicional >= 10) {
        //     raio = raio - adicional;
        // }
        pincel.arc(x, y, raio, 0, 2 * Math.PI);
        pincel.fill();
    }

    function limpaTela() {
        pincel.fillStyle = "gray";
        pincel.fillRect(0, 0, 600, 400);
        pincel.fillStyle = "blue";
        posicao = 0;
        mudaIndicadorCor();
    }

    function mudaCor() {
        posicao++;
        if (posicao >= cores.length) {
            posicao = 0;
        }
        mudaIndicadorCor();
        return false;
    }

    function mudaIndicadorCor() {
        pincelIndicadorCor.fillStyle = cores[posicao];
        pincelIndicadorCor.fillRect(0, 0, 50, 50);
    }

    var cores = ["blue", "red", "green"];
    var posicao = 0;

    var raio = 10;
    var adicional = 5;

    tela.onclick = desenhaCirculo;
    button.onclick = limpaTela;
    tela.oncontextmenu = mudaCor;
</script>

Existe algum erro que não estou conseguindo visualizar no código ou é alguma configuração do meu sistema operacional?

5 respostas

Oi André, realmente, no Linux o ALT é para mostrar o painel, o menu do tipo (fiz um teste aqui). Realmente dará problema nessa plataforma.

Bom, você pode usar outra tecla de atalho, inclusive vou alterar o exercício para não usar o ALT.

Obrigado pelo retorno.

.

Não posso usar control porque dá pau no MAC :)

Estou vendo aqui, mas continue com os estudos, não parece enquanto vejo como resolver da melhor forma.

solução!

Então, eu resolvi colocando um aviso para usuários Linux. Nesse exercício de lógica de programação eu deixei passar um problema de compatibilidade. Para resolvê-lo eu teria que sair muito da lógica e apelar para um código mais tenso. Então o aviso parece ser suficiente para quem esta começando.

Obrigado Flávio! É bom que assim já ficamos sabendo de algumas restrições que existem em cada sistema operacional.