2
respostas

Clique = Objeto | Preciso de ajuda para corrigir um detalhe

Nesse código deixei comentado as opções de onclick para funções... mas minha necessidade de ajuda está na última parte ... vou por o código completo, depois só com o que usei...

Simples função do código - No clique ele vai perguntar tipo do objeto desenhado e qual a cor...

PRECISO DE AJUDA NA SEGUINTE CORREÇÃO... QUANDO ESCOLHO 1 ou 2 ELE PINTA NORMALMENTE SÓ O OBJETO SELECIONADO, MAS QUANDO ESCOLHO A OPÇÃO 3 ELE PINTA O OBJETO SELECIONADO E O ANTERIOR.... E EU NÃO TO CONSEGUINDO CORRIGIR ISSO... KKKKKKKKK

<meta charset="utf-8">
<canvas width="800" height="800"></canvas>

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

    pincel.fillStyle = "lightgrey";
    pincel.fillRect(0, 0, 800, 800);
    pincel.strokeStyle = 'black'
    pincel.strokeRect(0, 0, 800, 800);

/*

    function cor(cor){
    var cor = prompt("Qual cor você deseja pintar? em inglês");
    return cor;
    }

    function exibirBola(evento){
        var cor = prompt("Qual cor você deseja pintar? em inglês")

        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;

        pincel.fillStyle = cor();
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2*3.14);
        pincel.fill();


    };

    function exibirTri(evento){
        var cor = prompt("Qual cor você deseja pintar? em inglês")
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.fillStyle = cor();
        pincel.beginPath();
        pincel.moveTo(x, y);
        pincel.lineTo(x-10, y+10);
        pincel.lineTo(x+10, y+10);
        pincel.fill();


    };

    function exibirQd(evento){
        var cor = prompt("Qual cor você deseja pintar? em inglês")

        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.fillStyle = cor();
        pincel.fillRect(x, y, 10, 10);
        pincel.fill();


    };
*/

    function exibir(evento){
        var item = parseInt(prompt ("1 = Bola | 2 = Triângulo | 3 = Quadrado "));

        if (item == 1){
            var x = evento.pageX - tela.offsetLeft;
            var y = evento.pageY - tela.offsetTop;
            var cor = prompt("Qual cor você deseja pintar? em inglês");
            pincel.fillStyle = cor;
            pincel.beginPath();
            pincel.arc(x, y, 10, 0, 2*3.14);
            pincel.fill();

        }if (item == 2){
                    var x = evento.pageX - tela.offsetLeft;
                    var y = evento.pageY - tela.offsetTop;
                    var cor = prompt("Qual cor você deseja pintar? em inglês");
                    pincel.fillStyle = cor;
                    pincel.beginPath();
                    pincel.moveTo(x, y);
                    pincel.lineTo(x-10, y+10);
                    pincel.lineTo(x+10, y+10);
                    pincel.fill();
        } 
        if (item == 3){
                        var x = evento.pageX - tela.offsetLeft;
                        var y = evento.pageY - tela.offsetTop;
                        var cor = prompt("Qual cor você deseja pintar? em inglês");
                        pincel.fillStyle = cor;
                        pincel.fillRect(x, y, 10, 10);
                        pincel.fill();
        }
         if (item != 1 && item != 2 && item != 3){

                    alert("Opção inválida!")
        }
    }
    }

    tela.onclick = exibir;


</script>
2 respostas

aqui o código isolado

<meta charset="utf-8">
<canvas width="800" height="800"></canvas>

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

    pincel.fillStyle = "lightgrey";
    pincel.fillRect(0, 0, 800, 800);
    pincel.strokeStyle = 'black'
    pincel.strokeRect(0, 0, 800, 800);

    function exibir(evento){
        var item = parseInt(prompt ("1 = Bola | 2 = Triângulo | 3 = Quadrado "));

        if (item == 1){
            var x = evento.pageX - tela.offsetLeft;
            var y = evento.pageY - tela.offsetTop;
            var cor = prompt("Qual cor você deseja pintar? em inglês");
            pincel.fillStyle = cor;
            pincel.beginPath();
            pincel.arc(x, y, 10, 0, 2*3.14);
            pincel.fill();

        }if (item == 2){
                    var x = evento.pageX - tela.offsetLeft;
                    var y = evento.pageY - tela.offsetTop;
                    var cor = prompt("Qual cor você deseja pintar? em inglês");
                    pincel.fillStyle = cor;
                    pincel.beginPath();
                    pincel.moveTo(x, y);
                    pincel.lineTo(x-10, y+10);
                    pincel.lineTo(x+10, y+10);
                    pincel.fill();
        } 
        if (item == 3){
                        var x = evento.pageX - tela.offsetLeft;
                        var y = evento.pageY - tela.offsetTop;
                        var cor = prompt("Qual cor você deseja pintar? em inglês");
                        pincel.fillStyle = cor;
                        pincel.fillRect(x, y, 10, 10);
                        pincel.fill();
        }
          if (item != 1 && item != 2 && item != 3){

                    alert("Opção inválida!")
        }
    }
    }

    tela.onclick = exibir;


</script>

Olá Jônatas, tudo certo?

Peço desculpa pela demora em lhe trazer uma resposta.

O que está fazendo o ultimo objeto adicionado mudar de cor toda vez que você adiciona o objeto da opção 3 é a sua função exibirQd(), que está faltando a chamada de uma certa função que marca o inicio da construção do objeto.

function exibirQd(evento){
    var cor = prompt("Qual cor você deseja pintar? em inglês")
    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;
    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.beginPath();
    pincel.fillStyle = cor();
    pincel.fillRect(x, y, 10, 10);
    pincel.fill();
}

Na criação da função exibirQd(), você acabou esquecendo de adicionar pincel.beginPath(), que é reposável por definir o inicio da produção e caracterização do objeto, por conta disso toda vez que é chamada a função pincel.fillStyle() dentro da sua função exibirQd() ele vai mudar a cor do objeto que você está criando agora e o objeto anterior.

Fiz algumas alterações no seu código também, para que ficasse mais simples e consequentemente mais fácil de entender.

<meta charset="utf-8">
<canvas width="800" height="800"></canvas>

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

    pincel.fillStyle = "lightgrey";
    pincel.fillRect(0, 0, 800, 800);
    pincel.strokeStyle = 'black'
    pincel.strokeRect(0, 0, 800, 800);

    function cor(cor){
        var cor = prompt("Qual cor você deseja pintar? em inglês");
        return cor;
    }

    function exibirBola(evento){
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = cor();
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2*3.14);
        pincel.fill();

    }

    function exibirTri(evento){
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = cor();
        pincel.beginPath();
        pincel.moveTo(x, y);
        pincel.lineTo(x-10, y+10);
        pincel.lineTo(x+10, y+10);
        pincel.fill();

    }

    function exibirQd(evento){
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
        pincel.fillStyle = cor();
        pincel.beginPath();  
        pincel.fillRect(x, y, 10, 10);
        pincel.fill();

    }

    function exibir(evento){
        var item = parseInt(prompt ("1 = Bola | 2 = Triângulo | 3 = Quadrado "));

        if (item == 1){
            exibirBola(evento);
        } else {
            if (item == 2){
                exibirTri(evento)
            } else {
                if (item == 3){
                    exibirQd(evento)
                } else {

                    if (item != 1 && item != 2 && item != 3){
                        alert("Opção inválida!")
                    }
                }
            }
        } 
    }

    tela.onclick = exibir;

</script>

Espero que eu tenha lhe ajudado de alguma forma, caso ainda tenha dúvidas, vou estar a sua disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado! ✓.