1
resposta

Grid de fotos aleatórias

Olá :)

Estou fazendo um exercício prático que consiste em criar um grid de fotos aleatórias ao clicar em um botão. O problema que enfrento no momento é que ao efetuar mais de um clique as fotos permanecem as mesmas. O que estou fazendo de errado? Abaixo deixo meu código e um print do output do programa.

https://puu.sh/GlzHP/28b7bc6ad9.png

// Declaração de variáveis.
const container = document.querySelector('.container');
const grid = document.createElement('div');
const btn = document.createElement('button');

grid.classList.add('grid');
btn.textContent = 'Build gallery';
container.appendChild(grid);
container.appendChild(btn);

// Escutador de eventos, botão.
btn.addEventListener('click', function(event) {
    event.preventDefault();
    buildPhotoGrid();
})

// Criando o grid de fotos.
function buildPhotoGrid() {
    let images = [];
    for(i = 0; i < 4; i++) {
        images[i] = document.createElement('img');
        images[i].classList.add('pic');
        images[i].src = `https://picsum.photos/600?random=${i}`;
        grid.insertAdjacentElement('beforeend', images[i]);
    }
}
1 resposta

Fala ai Leonardo, tudo bem? Nesse caso você precisa realizar um algoritmo chamado shuffle, ou seja, você pega um array e embaralha ele.

Olhando o seu código eu não consegui visualizar esse embaralhamento.

Um exemplo bem simples seria:

[1,2,3,4,5,6].sort(function() {
  return .5 - Math.random();
});

No caso em vez de um array com números, você poderia ter um array com caminhos de imagens e depois de embaralhar você as adiciona no DOM.

Espero ter ajudado.