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

codigo final

Consegui fazer o codigo funcionar mas ele tem um erro. Não consigo selecionar a cor que quero sem antes seguir uma sequencia da esquerda para direita.

Qual poderia ser o erro:

var tela = document.querySelector('canvas');
var pincel = tela.getContext ('2d');
pincel.fillStyle = 'grey';
pincel.fillRect(0, 0, 400, 400);
pincel.fill();

function desenhaQuadrado (x, y, tamanho, cor) {

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

}

function paletaCores () {

    desenhaQuadrado(xRed, yQuadrado, tamanhoQuadrado, 'red');
    desenhaQuadrado(xBlue, yQuadrado, tamanhoQuadrado, 'blue');
    desenhaQuadrado(xOrange, yQuadrado, tamanhoQuadrado, 'orange');
}

function desenhaCirculo(x, y, raio, cor) {

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

}

function movimentoMouse (evento) {

    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;

    if(desenha && + desenhaArea(x, y)) {

        desenhaCirculo(x, y, 5, corSelecionada);
    }

}

function habilitaDesenhar() {

    desenha = true;
}

function desabilitaDesenhar() {

    desenha = false;
}

function desenhaArea (x, y) {

     if(x >= 0 && x < 3*tamanhoQuadrado && y >= 0 && y < tamanhoQuadrado) {
        return false;
    } else {
        return true;
    }
}

function selecionaCor (evento) {

    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;

    if (y > yQuadrado && y < yQuadrado + tamanhoQuadrado) {

        if (x > xRed && x < xRed + tamanhoQuadrado) {

        corSelecionada = 'red';
        }

}   else if (x > xBlue && x < xBlue + tamanhoQuadrado) {

        corSelecionada = 'blue';

}   else if (x > xOrange && x < xOrange + tamanhoQuadrado) {

        corSelecionada = 'orange';
        
}

}

tela.onmousemove = movimentoMouse;
tela.onclick = selecionaCor;
tela.onmousedown = habilitaDesenhar;
tela.onmouseup = desabilitaDesenhar;

var desenha = false;
var corSelecionada = 'white';
var yQuadrado = 0;
var tamanhoQuadrado = 50;
var xRed = 0;
var xBlue = 50;
var xOrange = 100;

paletaCores();
4 respostas

Olá, Misael! Tudo bem?

Sinto muito que está com esse problema. Vamos resolver isso!

Vou apontar algumas possíveis causas para esse comportamento:

Lógica de Seleção de Cores: A lógica na função selecionaCor parece estar correta. No entanto, você está verificando as posições dos cliques em relação às coordenadas xRed, xBlue e xOrange. Certifique-se de que esses valores estão corretos e não estão se sobrepondo.

Área de Seleção de Cores: A função selecionaCor verifica se a posição do clique está dentro de certas coordenadas para selecionar a cor. Certifique-se de que essas coordenadas estão definidas de acordo com a posição dos quadrados de cores na tela.

Evento de Clique: Certifique-se de que o evento de clique (onclick) está sendo capturado corretamente na tela. Pode ser útil adicionar alguns console.log dentro da função selecionaCor para ver se o código está sendo executado conforme esperado.

Ordem de Carregamento: Certifique-se de que o código esteja carregando na ordem correta. É importante garantir que a função paletaCores() seja chamada após todas as outras funções e definições de variáveis.

Se você revisar esses pontos e garantir que todas as coordenadas, lógica de seleção e eventos de clique estão configurados corretamente, deve ser possível selecionar as cores corretamente, independentemente da sequência da esquerda para a direita.

Espero ter ajudado, qualquer dúvida estou aqui.

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

Boa noite Maria. Tudo bem?

então, eu refiz a function selecionaCor mas ainda sim não consegui identificar o problema.

solução!

Oi Misael, tudo bem com você?

Sinto muito que não deu certo.

Eu realizei algumas mudanças nas função aqui e deu certo. Caso queira tentar aí, pode deixa-lá assim:

function selecionaCor(evento) {
    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;

    if (y > yQuadrado && y < yQuadrado + tamanhoQuadrado) {
        if (x > xRed && x < xRed + tamanhoQuadrado) {
            corSelecionada = 'red';
        } else if (x > xBlue && x < xBlue + tamanhoQuadrado) {
            corSelecionada = 'blue';
        } else if (x > xOrange && x < xOrange + tamanhoQuadrado) {
            corSelecionada = 'orange';
        }
    }
}

Acredito que assim, o problema será resolvido! Fico à disposição.

Abraços e bons estudos!

não acredito que o problema era tão simples e eu não estava vendo kkkkkk muito obrigado