Olá!
Gostaria de melhorar o meu código do 'Amigo Secreto'. Vi que é possível clicar mais de uma vez no botão 'sortear' e isso gera vários sorteios com o mesmo array. Imagino que não era para isso acontecer. Como posso permitir com o botão sortear seja clicado somente uma vez? É possível desativar esse botão dentro da função sortear() e só reativá-lo após clicarmos em reiniciar?
Colocarei abaixo como está o meu código atual do 'Amigo Secreto':
let amigos = [];
function adicionar () { let amigo = document.getElementById('nome-amigo'); if (amigo.value == '') { alert('Informe o nome do amigo'); return; } if (amigos.includes(amigo.value)) { alert('Nome já adicionado. Informe um nome diferente!'); return; } let lista = document.getElementById('lista-amigos'); amigos.push(amigo.value); if (lista.textContent == '') { lista.textContent = amigo.value; } else { lista.textContent = lista.textContent + ', ' + amigo.value; } amigo.value = ''; atualizarLista(); atualizarSorteio(); }
function sortear() { if (amigos.length < 4) { alert('Adicione pelo menos 4 amigos!'); return; } embaralhar(amigos); let sorteio = document.getElementById('lista-sorteio'); 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/>';
}
}
}
function excluirAmigo(index) { amigos.splice(index, 1); atualizarLista(); atualizarSorteio(); }
function embaralhar(lista) { for (let indice = lista.length; indice; indice--) { const indiceAleatorio = Math.floor(Math.random() * indice); [lista[indice - 1], lista[indiceAleatorio]] = [lista[indiceAleatorio], lista[indice - 1]]; } }
function atualizarLista() { let lista = document.getElementById('lista-amigos'); lista.innerHTML = ''; for (let i = 0; i < amigos.length; i++) { // Cria um elemento de parágrafo para cada amigo let paragrafo = document.createElement('p'); paragrafo.textContent = amigos[i]; // Adiciona um evento de clique para excluir o amigo paragrafo.addEventListener('click', function() { excluirAmigo(i); }); // Adiciona o parágrafo à lista lista.appendChild(paragrafo); } }
function atualizarSorteio() { let sorteio = document.getElementById('lista-sorteio'); sorteio.innerHTML = ''; }
function reiniciar () { amigos = []; document.getElementById('lista-amigos').innerHTML = ''; document.getElementById('lista-sorteio').innerHTML = ''; }