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

[Desafio 02]

app.js

let precoTotal;
apagarResultado();

function calcularCusto()
{                
    let sectionNode = adicionarClasse('carrinho__produtos__produto', document.createElement('section')); 
    let listaSpanNode = [adicionarClasse('texto-azul', document.createElement('span')), adicionarClasse('texto-azul', document.createElement('span'))];
    let listaTextNode = [document.getElementById('distancia').value, document.getElementById('eficiencia').value, document.getElementById('preco-gasolina').value];
    if (validarEntrada(listaTextNode))
    {
        return;
    }
    precoTotal = calcularCustoViagem(document.getElementById('distancia').value, document.getElementById('eficiencia').value, document.getElementById('preco-gasolina').value);
    console.log('Distância: ', listaTextNode[0], '\nEficiencia: ', listaTextNode[1], '\nPreço da Gasolina: ', listaTextNode[2], '\nCusto da Viagem: ', precoTotal);
    adicionarElemento(sectionNode, adicionarElemento(listaSpanNode[0], listaTextNode[0] + ' / '));
    adicionarElemento(sectionNode, listaTextNode[1]);
    adicionarElemento(sectionNode, adicionarElemento(listaSpanNode[1], ' * ' + listaTextNode[2]));
    adicionarElemento(document.getElementById('lista-produtos'), sectionNode);
    document.getElementById('valor-total').textContent = 'R$' + precoTotal;
    document.getElementById('distancia').value = document.getElementById('eficiencia').value = document.getElementById('preco-gasolina').value = '';
    mudarEstadoBotoes('calcular', 'apagar');
}

function apagarResultado()
{    
    removerFilhos();
    document.getElementById('valor-total').textContent = 'R$' + (precoTotal = 0);
    document.getElementById('distancia').value = document.getElementById('eficiencia').value = document.getElementById('preco-gasolina').value = '';
    mudarEstadoBotoes('apagar', 'calcular');
}

function validarEntrada(listaTextNode)
{
    return listaTextNode[0] < 1 || listaTextNode[0] == '' || 'undefined' === typeof listaTextNode[0] || listaTextNode[1] == '' || 'undefined' === typeof listaTextNode[1] || listaTextNode[2] < 1 || listaTextNode[2] == '' || 'undefined' === typeof listaTextNode[2];
}

function mudarEstadoBotoes(idBotao1, idBotao2)
{
    document.getElementById(idBotao1).style.visibility = 'hidden';
    document.getElementById(idBotao2).style.visibility = 'visible';
}

function separarDados(texto, separador)
{
    return texto.split(separador);
}

function adicionarClasse(classe, elemento)
{
    elemento.classList.add(classe);    
    return elemento;
}

function adicionarElemento(elementoPai, elementoFilho)
{
    elementoPai.append(elementoFilho);
    return elementoPai;
}


function calcularCustoViagem(distancia, eficiencia, precoGasolina)
{
    return distancia / eficiencia * precoGasolina;
}

function removerFilhos()
{
    for (const filho of document.querySelectorAll('.carrinho__produtos__produto'))
    {
        document.getElementById('lista-produtos').removeChild(filho);
    }
}
2 respostas

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@700&family=Inter:wght@400;600;700&display=swap"
    rel="stylesheet">
  <link rel="stylesheet" href="style.css">

  <title>Calcular custo da viagem</title>
</head>

<body>
  <main class="conteudo-principal">
    <div class="grafismo-azul"></div>
    <section class="adicionar-produto">
      <h1 class="titulo">
        Calcular custo <span class="texto-azul">da viagem</span>
      </h1>

      <form class="formulario">

        <section class="parte-inferior">
          <label class="campo-grupo">
            <span class="texto-medio-azul">Dist.</span>
            <input class="quantidade-input" id="distancia" type="number" placeholder="0">
          </label>

          <label class="campo-grupo">
            <span class="texto-medio-azul">Efic.</span>
            <input class="quantidade-input" id="eficiencia" type="number" placeholder="0">
          </label>

          <label class="campo-grupo">
            <span class="texto-medio-azul">Preço</span>
            <input class="quantidade-input" id="preco-gasolina" type="number" placeholder="0">
          </label>

          <section class="botoes-wrapper">
            <button onclick="calcularCusto()" type="button" id="calcular" class="botao-form botao-adicionar">Calcular</button>
            <button onclick="apagarResultado()" type="button" id="apagar" class="botao-form botao-limpar">Apagar</button>
          </section>
        </section>
      </form>
    </section>
    <section class="carrinho">
      <img src="./assets/carrinho-cinza.svg" alt="Imagem de um carrinho de compras cinza">

      <div class="titulo-wrapper">
        <img src="./assets/icone-carrinho.svg" alt="ícone de carrinho">

        <h2 class="carrinho__titulo">Resultado do calculo</h2>
      </div>

      <section class="carrinho__produtos" id="lista-produtos">
        <section class="carrinho__produtos__produto">
          <span class="texto-azul">1x</span> Celular <span class="texto-azul">R$1400</span>
        </section>
      </section>

      <div class="divisoria"></div>

      <p class="carrinho__total">
        Total: <span class="texto-azul" id="valor-total">R$1400</span>
      </p>
    </section>
  </main>

  <script src="js/app.js"></script>
</body>

</html>

Nesse desafio eu usei o carrinho de compras como base.

solução!

Oi Leonardo, tudo bem?

Agradeço por compartilhar o seu código! Parabéns pela prática e pelo desenvolvimento do desafio. É muito positivo ver como você aplicou os conceitos aprendidos, tanto na estrutura do código JavaScript quanto no HTML.

A utilização de funções bem definidas e modularização é uma boa prática. E, a interatividade proporcionada pelos botões "Calcular" e "Apagar" acrescenta uma experiência mais amigável ao usuário.

Um abraço e bons estudos.