2
respostas

Como impedir os valores de irem além do limite ?

Os meus botões tem os limitadores de não poderem ir abaixo de zero ou além do 99. Porém o clique no botão continua contabilizando valor para as estatísticas. Alguem poderia me ajudar com alguma solução ?

const controle = document.querySelectorAll('[data-controle]');
const estatistica = document.querySelectorAll('[data-estatistica]');

const pecas = {
  bracos: {
    forca: 29,
    poder: 35,
    energia: -21,
    velocidade: -5,
  },

  blindagem: {
    forca: 41,
    poder: 20,
    energia: 0,
    velocidade: -20,
  },
  nucleos: {
    forca: 0,
    poder: 7,
    energia: 48,
    velocidade: -24,
  },
  pernas: {
    forca: 27,
    poder: 21,
    energia: -32,
    velocidade: 42,
  },
  foguetes: {
    forca: 0,
    poder: 28,
    energia: 0,
    velocidade: -2,
  },
};

controle.forEach(elemento => {
  elemento.addEventListener('click', evento => {
    manipulaDados(evento.target.dataset.controle, evento.target.parentNode);
    atualizaEstatistica(
      evento.target.dataset.peca,
      evento.target.dataset.controle
    );
  });
});

function manipulaDados(operacao, controle) {
  const peca = controle.querySelector('[data-contador]');

  if (operacao === '-' && peca.value > 0) {
    peca.value = parseInt(peca.value) - 1;
  }
  if (operacao === '+' && peca.value < 99) {
    peca.value = parseInt(peca.value) + 1;
  }
}

function atualizaEstatistica(peca, operacao) {
  estatistica.forEach(elemento => {
    if (operacao === '-') {
      elemento.textContent =
        parseInt(elemento.textContent) -
        pecas[peca][elemento.dataset.estatistica];
    } else {
      elemento.textContent =
        parseInt(elemento.textContent) +
        pecas[peca][elemento.dataset.estatistica];
    }
  });
}
2 respostas

Ola, Mario!

As estatíticas continuam atualizando pois o que 'dispara' a função atualizaEstatitica() é o evento de 'click', então é neccessário que haja um limitador para esta função também.

Espero ter ajudado.

No meu caso resolvi colocar um validador no atualizaEstatistica() para impedir que execute a soma das estatisticas quando for negativo:

function manipulaDados(tipoDeOperacao, paiDoAlvo){
    const contador = paiDoAlvo.querySelector('[data-contador]');
    const peca = paiDoAlvo.querySelector('[data-peca]');
    let validador = false;

    if(tipoDeOperacao === "-"){
        if(parseInt(contador.value) > 0){
            contador.value = parseInt(contador.value) - 1;

            validador = true;
        }
    } else {
        contador.value = parseInt(contador.value) + 1;
    }

    atualizaEstatisticas(peca.dataset.peca, tipoDeOperacao, validador);
}

function atualizaEstatisticas(peca, tipoDeOperacao, validador){
        estatistica.forEach( (elemento) => {
            if(tipoDeOperacao === "-"){
                if(validador){
                    elemento.textContent = parseInt(elemento.textContent) - pecas[peca][elemento.dataset.estatistica];
                }
            } else {
                elemento.textContent = parseInt(elemento.textContent) + pecas[peca][elemento.dataset.estatistica];
            }
        });
};

Você pode criar um if para quando for acima de 99 ele altere para false o validador.