1
resposta

[Sugestão] Solução/Problema Troca de cor

Resolvi o exercício de troca de cores assim:

const setaCores = document.querySelectorAll('[data-cor]');
const mostraCorInput = document.querySelector('[data-cores]');
const robo = document.querySelector('[data-robo]');

const vermelho = ["img/imagens-do-robotron/Vermelho/Vermelho.png", "red"];
const azul = ["img/imagens-do-robotron/Azul/Azul.png", "blue"];
const amarelo = ["img/imagens-do-robotron/Amarelo/Amarelo.png", "yellow"];
const rosa = ["img/imagens-do-robotron/Rosa/Rosa.png", "pink"];
const branco = ["img/imagens-do-robotron/Branco/Branco.png", "white"];
const preto = ["img/imagens-do-robotron/Preto/Preto.png", "black"];

const cores = [vermelho, azul, amarelo, rosa, preto, branco];

******
let clicks = 0;
let contador = 0;

setaCores.forEach(element => {
    element.addEventListener('click', event => {
        slideCor(event.target.dataset.cor, clicks++);
    })
});

function alteraCor() {
    robo.src = cores[contador][0];
    mostraCorInput.style.backgroundColor = cores[contador][1];
}

function slideCor(params, clicks) {

    if (params === ">") {

        if (contador > cores.length - 1) {
            contador = 0;
            alteraCor();
            contador++;
        } else {
            alteraCor()
            contador++;
        }
    }
    else {

        if(contador == 0 && clicks == 0) {
            contador = cores.length - 2;
            alteraCor();
        }else if(contador == 0 && clicks != 0) {
            contador = cores.length - 1;
            alteraCor();
        }else{
            contador--;
            alteraCor();
        }

    }
}

Porém, tenho uma dúvida, se eu clico na setinha da direita, para eu alterar a cor clicando na seta da esquerda, eu preciso clicar 2 vezes. O mesmo acontece quando eu clico na seta da esquerda e, logo após, vou alterar clicando na direita.

O problema acontece pois ele soma a cada vez que eu clico, e para eu diminuir, teria que diminuir por 2. Porém, não sei como fazer isso, alguma sujestão?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade ![Insira aqui a descrição dessa imagem para ajudar na acessibilidade](https://cdn1.gnarususercontent.com.br/1/1375441/f506dd0e-6248-442e-b5c9-d5b151a80ea4.

1 resposta

Olá Heitor, tudo bem?

Peço desculpas pela demora em obter um retorno

Infelizmente não consegui implementar o seu código na minha máquina, devido o index está diferente, mas analisando o seu código, percebo que você está usando uma variável contador para guardar o índice da cor atual no array cores. Quando você clica na seta da direita, você altera a cor e depois incrementa(++) o contador. Quando você clica na seta da esquerda, você decrementa(--) o contador e depois altera a cor.

Isso faz com que, se você clicar na seta da direita e depois na esquerda, você volte para a mesma cor que estava antes, pois o contador não mudou de valor. O mesmo acontece se você clicar na esquerda e depois na direita.

Uma forma de resolver isso é mudar a ordem das operações: primeiro incrementar ou decrementar o contador e depois alterar a cor. Assim, você sempre vai mudar para a próxima ou a anterior cor no array.

if (contador > cores.length - 1) {

  contador = 0;
  contador++;
  alteraCor();

} else {

  contador++;
  alteraCor();
}

Caso o erro persista peço que me envie os arquivos, para que eu consiga analisar o seu código e simular o problema para ajudá-lo de forma mais assertiva, gostaria de pedir que você enviasse o link do GitHub onde está o seu projeto ou o drive com os arquivos.

Espero ter ajudado!

Sucesso

Abraços e até mais!

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software