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

[Projeto] Projeto 2 - Carrinho de Compras

Projeto desenvolvido passo a passo durante a aula

    let totalGeral;
    limpar();


    function adicionar() {
       //recuperar valores nome do produto, quantidade e valor 
        let produto = document.getElementById('produto').value;
        let nomeProduto = produto.split('-')[0];
        let valorUnitario = produto.split('R$')[1];
        let quantidade = document.getElementById('quantidade').value;
       //calcular o preço, nosso subtotal 
        let preco = quantidade * valorUnitario;
        let carrinho = document.getElementById('lista-produtos');
       //adicionar ao carrinho  
        carrinho.innerHTML = carrinho.innerHTML + `<section class="carrinho__produtos__produto">
        <span class="texto-azul">${quantidade}x</span> ${nomeProduto} <span class="texto-azul">R$${preco}</span>
      </section>`;
      //atualizar o valor total
        totalGeral = totalGeral + preco;
        let campoTotal = document.getElementById('valor-total');
        campoTotal.textContent = `R$ ${totalGeral}`;
        document.getElementById('quantidade').value = '';

    }

    function limpar() {
        totalGeral = 0;
        document.getElementById('lista-produtos').innerHTML ='';
        document.getElementById('valor-total').textContent ='R$ 0.00';

    }

Aqui, esta o mesmo código, mas agora com algumas alterações visando tentar deixa-lo mais "dinâmico". Elas consistem basicamente em duas. Permitir alteração livre dos valores dos produtos, ao mesmo tempo que os imprime no HTML, a segunda é alterar para o plural os produtos que recebem mais de 1 quantidade.

    let totalGeral;
    //Variavel criada para permitir, dinamicamente, alteração dos preços no código e nos cálculos, permitindo atualização constante.
    let produtos = [
        {nome: 'Fone de Ouvido', preco: 400},
        {nome: 'Celular', preco: 2800},
        {nome: 'Oculus VR', preco: 10000}
    ];
    //as duas linhas abaixo "onchange" e a função "aplicarFoco()" deixam o cursor na aba quantidade automaticamente.
    document.getElementById('produto').onchange = aplicarFoco; //Essa manda o cursor sempre que o usuário escolher um produto.
    aplicarFoco(); //essa já deixa o foco na quantidade assim que a página é carregada.
    limpar();
    //Função criada para que a alteração dos preços seja aplicada na exibição HTML e o usuário possa ve-la.
    function atualizarOpcoes() {
        let selectProduto = document.getElementById('produto');
        selectProduto.innerHTML = '';



        for (let i = 0; i < produtos.length; i++) {
            selectProduto.innerHTML += `<option value="${produtos[i].nome} - R$${produtos[i].preco}">${produtos[i].nome} - R$${produtos[i].preco}</option>`;
        }
    }
    //Função responsável por colocar Fone e Celular no plural quando o usuário escolher mais de 1 Qtde dos respectivos itens.
    function pluralizeProduto(nome, quantidade) {
        return (quantidade > 1 && (nome.toLowerCase() === 'celular' || nome.toLowerCase() === 'fone de ouvido')) 
            ? (nome.toLowerCase() === 'celular' ? 'Celulares' : 'Fones de Ouvido')
            : nome;
    }


    function adicionar() {
       //recuperar valores nome do produto, quantidade e valor 
        let produtoIndex = document.getElementById('produto').selectedIndex;
        let nomeProduto = produtos[produtoIndex].nome;
        let valorUnitario = produtos[produtoIndex].preco;
        let quantidade = document.getElementById('quantidade').value;
        nomeProduto = pluralizeProduto(nomeProduto, quantidade); //Aqui é a chamada da função adicionada acima.
       //calcular o preço, nosso subtotal 
        let preco = quantidade * valorUnitario;
        let carrinho = document.getElementById('lista-produtos');

      //adicionar ao carrinho  
        carrinho.innerHTML = carrinho.innerHTML + `<section class="carrinho__produtos__produto">
        <span class="texto-azul">${quantidade}x</span> ${nomeProduto} <span class="texto-azul">R$${preco}</span>
      </section>`;
      //atualizar o valor total
        totalGeral = totalGeral + preco;
        let campoTotal = document.getElementById('valor-total');
        campoTotal.textContent = `R$ ${totalGeral}`;
        document.getElementById('quantidade').value = '';


    }

    function limpar() {
        totalGeral = 0;
        document.getElementById('lista-produtos').innerHTML ='';
        document.getElementById('valor-total').textContent ='R$ 0.00';

    }

    function aplicarFoco() {
        document.getElementById('quantidade').focus();
    }
    //Ao chamar a função de alteração de preços aqui, garantimos que os preços sejam atualizados sempre que os modificar-mos.
    atualizarOpcoes();

Eu queria implementar uma terceira, que era mandar o cursor automaticamente para a barrinha de Quantidade, assim que o produto fosse escolhido, mas não consegui deixar do jeito que eu queria então abri mão por hora. Se alguém tiver uma sugestão para essa minha terceira implementação, eu agradeceria muito.

2 respostas
solução!

Olá, Leonardo!

Pelo que entendi, você está com dúvidas sobre como implementar uma terceira funcionalidade no seu projeto de Carrinho de Compras, que seria mandar o cursor automaticamente para a barra de Quantidade assim que o produto for escolhido. Infelizmente, não consegui identificar no código fornecido onde você tentou implementar essa funcionalidade, então não consigo te dar uma resposta precisa.

No entanto, posso te dar uma sugestão de como você pode implementar essa funcionalidade. Você pode utilizar o método focus() para direcionar o cursor para o campo de Quantidade assim que o produto for selecionado. Por exemplo, você pode adicionar o seguinte trecho de código dentro da função adicionar():

document.getElementById('quantidade').focus();

Dessa forma, assim que o produto for escolhido, o cursor será automaticamente direcionado para o campo de Quantidade.

Espero que essa sugestão seja útil para você! Se tiver mais alguma dúvida, é só me dizer. Espero ter ajudado e bons estudos!

Oi Renan, então, eu tentei usar essa função focus, o problema é que, se eu colocar dentro da função "adicionar" o curso só moverá automaticamente quando eu chamar a função(Que vai ser ao clicar no botão), e ao colocar fora, tava dando erro. Ela simplismente ignorou meu comando. Minha idéia é de quando iniciar a página, ao selecionar um produto(antes de adiciona-lo) o cursor se mova automaticamente para a barra de quantidades para que a mesma possa ser digitada antes do botão que chama a função adicionar seja acionado.

Edit: Ao fazer o projeto da aula seguinte, me deparei com a mesma questão do foco desse projeto, com mais calma dessa vez, consegui resolver lá e já alterei o código postado aqui, deixando funcional do jeito que eu queria, aplicando essa linha que você, Renan, recomendou e uma outra auxiliado pelo GPT. Obrigado