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

[Dúvida] Melhorar o projeto final

Boa tarde pessoal, eu estou com alguns problemas no código e não consegui resolver, vou deixar o link dele no git e as duvidas abaixo:

link: https://github.com/LuDesigner/Amigo_Secreto

  1. Quando uso o reiniciar o código na página é limpo, porém as informações ainda ficam armazenadas, tanto que quando reinicio e clico novamente sortear, ele sorteia mesmo sem ter informações, porque ainda fica com as informações anteriores, como posso resolver isso? obs;. quando adiciono após reiniciar, ele apresenta novamente a lista que deveria ter sido limpa após reiniciar.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  1. outro problema que ocorre é que quando sorteio, ele continua sorteando, criando uma lista infinita fora da tela, como posso corrigir isso?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  1. E um outro que tentei resolver, mas sem sucesso, é que quando reinicio, ele começa aceitar valores vazios novamente.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  1. outra questão é a lista, que quanto mais nomes entra, mais ela segue ultrapassando o limite, como posso evitar que isso aconteça ?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas
solução!

Olá, Luis.

Tudo bem?

1 - Campo aceitando vazio: Na função adicionar() logo no começo, você pode utilizar um if para verificar se o valor do campo input está vazio, se estiver vazio você manda um alert com a mensagem: alert("Campos vazio"), se não(else) adiciona o amigo a lista com o amigos.push(amigo.value);, veja:

JavaScript:

function adicionar(){
    let amigo = document.getElementById('nome-amigo');
    let lista = document.getElementById('lista-amigos');

    if(amigo.value == ""){

        alert("Campos vazio")
    }else{
        amigos.push(amigo.value);
    }

....RESTO DO CÓDIGO NORMALMENTE - FOI OMITIDO

2 - Sorteio imprimindo a lista novamente: Para resolver essa parte que fica imprimindo os nomes do sorteio infinitamente quando aperta o botão "Sortear". Você pode simplesmente limpar o conteúdo da tag <p id="lista-sorteio"></p>, passando sorteio.innerHTML = "";, antes do for que imprime os nomes veja:

JavaScript:

function sortear() {

    if (amigos.length < 4) {
        alert('Adicione pelo menos 4 amigos!');
        return;
    }

    embaralha(amigos);
    let sorteio = document.getElementById('lista-sorteio') 
    sorteio.innerHTML = "";                                                                    //AQUI NESSA LINHA
    for (let i = 0; i < amigos.length; i ++) {
        if(i == amigos.length - 1){
            sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[0] + '<br';
        } else {
            sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[i + 1] + '<br>';
        }
    }
}

3 - Quando adiciona vários nomes, eles passam da tela:

Para resolver isso primeiro você vai ter que mudar sua tag <p id="lista-amigos"></p> no HTML para div, ficando: <div id="lista-amigos"></div>. No CSS você vai pegar essa div pelo id, e passar display: flex;, flex-direction: column; isso vai manter o mesmo resultado que estava antes, mantendo os nomes um em baixo do outro, agora vem o segredo, adiciona o flex-wrap: wrap;, isso faz com que, o nome vá para a coluna do lado quando chegar no limite da tela, então atribuimos, adicionamos um limite para o quadro, max-height: 200px;, isso faz com que o quadro comece pequeno e cresce até 200px, veja:

CSS:

#lista-amigos{
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  max-height: 200px;
}

Isso já resolve, porém os nomes da segunda coluna vão ficar colados, então para corrigir, na função atualizarLista() vamos adicionar a linha de código paragrafo.classList.add("paragrafo-nome") após a criação do "paragrafo" assim vai adicionar uma classe CSS chamada "paragrafo-nome" aos elementos <p> dos nomes, então no CSS adicionamos uma margem a esquerda nesse elemento, assim os nomes não ficam colados, veja:

JavaScript:

function atualizarLista() {
    let lista = document.getElementById('lista-amigos');
    lista.innerHTML = '';

    for (let i = 0; i < amigos.length; i++) {

        let paragrafo = document.createElement('p');
        paragrafo.classList.add("paragrafo-nome")        //Adicionando a classe CSS
        paragrafo.textContent = amigos [i];

        paragrafo.addEventListener('click', function(){
            excluirAmigo(i);
        });

        lista.appendChild(paragrafo);
    }
}

CSS:

.paragrafo-nome{
  margin-left: 1em;
}

Testa por gentileza. Uma dica é mandar cada dúvida dessa em um tópico diferente assim vai ser mais rápida a resposta pois eu tive que fazer todas para depois te responder, sendo que eu poderia soltar a primeira e você já ir testando, enquanto eu ou outro monitor já ia respondendo as outras. Outro ponto é que não coloquei na ordem das suas dúvidas então confere por gentileza.

Espero ter ajudado. Qualquer dúvida manda aqui. Valeu.

Boa tarde Rodrigo, show, consegui resolver, a forma como explica consigo estudar as funções e onde precisava se aplicar, me ajudou bastante, eu vou fazer isso de postar separado quando tiver duvidas, havia postado no mesmo post para tentar manter a continuidade das duvidas, assim que terminar os outros cursos vou aplicar os novos conhecimentos também, gratidão.

Valeu Luis. Fico feliz em ajudar. Qualquer coisa conta com a gente!