Your code is showing several divs
random of the target class at a time because it has a for
from a given number to 0
.
As a solution to your problem you can store in an array those that have not yet been shown, calling it for example disponiveis
, and fetch the div
random to show from there:
//obter os divs existentes e guardar num array os que ainda não foram sorteados
let disponiveis = Array.from(document.getElementsByClassName("destino"));
function destino() {
if (disponiveis.length == 0) return; //se não existem mais sai
const n = parseInt(Math.random()*disponiveis.length); //sorteia apenas 1
disponiveis[n].style.display=''; //mostra o sorteado
disponiveis.splice(n,1); //remove do array o que foi sorteado
}
Notice I switched the elements to Array.from(document.getElementsByClassName("destino"))
to get an array instead of an array HTMLCollection
, which allows me to use later splice
to remove an element.
Example:
let disponiveis = Array.from(document.getElementsByClassName("destino"));
function destino() {
if (disponiveis.length == 0) return;
const n = parseInt(Math.random() * disponiveis.length);
disponiveis[n].style.display = 'block';
disponiveis.splice(n, 1);
}
document.getElementById("sortear").onclick = function(){
destino();
};
.destino {
display:none;
}
<div class="destino">D1</div>
<div class="destino">D2</div>
<div class="destino">D3</div>
<div class="destino">D4</div>
<div class="destino">D5</div>
<div class="destino">D6</div>
<div class="destino">D7</div>
<button id="sortear">Sortear</button>
In the example if we wanted to keep the order in which it was drawn it would be better to add the drawn ones to another div
:
let disponiveis = Array.from(document.getElementsByClassName("destino"));
const sorteados = document.getElementById("sorteados"); //div para sorteados
function destino() {
if (disponiveis.length == 0) return;
const n = parseInt(Math.random() * disponiveis.length);
disponiveis[n].style.display = 'block';
sorteados.appendChild(disponiveis[n]); //adicionar aos sorteados
disponiveis.splice(n, 1);
}
document.getElementById("sortear").onclick = function(){
destino();
};
.destino {
display:none;
}
<div class="destino">D1</div>
<div class="destino">D2</div>
<div class="destino">D3</div>
<div class="destino">D4</div>
<div class="destino">D5</div>
<div class="destino">D6</div>
<div class="destino">D7</div>
<button id="sortear">Sortear</button>
<div id="sorteados"></div><!-- div para colocar os sorteados-->