Criando uma galeria de imagens com carrossel, utilizando HTML, CSS e JS

Olá pessoal, neste artigo vamos fazer um passo a passo bem detalhado de como criar uma galeria de imagens com carrossel utilizando HTML, CSS e JavaScript...

Vou colocar os trechos do código e explicar um a um beleza? Segue aqui o link para visualização do projeto que está no ar em: https://valeriaduraes.github.io/galeriaDeImagensComJS/

Como plataforma para edição de código vamos utilizar o Visual Studio Code, e nele é possível utilizar o atalho (Ctrl + !) para criar o código base do arquivo index.html.

Vamos também importar dentro do <head> os links do arquivo styles.css e também os links que utilizaremos do slick para a criação do carrossel.

  <link rel="stylesheet" href="style.css" />
  <link
    rel="stylesheet"
    type="text/css"
    href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css"
  />
  <link
    rel="stylesheet"
    type="text/css"
    href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick-theme.min.css"
  />

E para criar a primeira parte do projeto que é a galeria, vamos criar uma div gallery <div class="gallery"> que irá englobar todo o código html desta etapa, após criamos outra div que irá conter a imagem principal da galeria, a imagem maior, e nela vamos colocar uma classe de main-img class="main-img" e também um onclick  onclick="openModal()" que é um atributo html utilizado para executar um script do javascript quando o elemento for clicado, basicamente ele ajuda a adicionar interatividade para as páginas; e iremos ainda nesta div acrescentar a tag img <img id="mainImg" src="" alt="" />, para que possamos colocar a nossa imagem principal da galeria.

Segue abaixo o código completo:

  <div class="galerry">
    <div class="main-img" onclick="openModal()">
      <img
        id="mainImg"
        src="imagem1.jpg" // colocar aqui o endereço da sua imagem
        alt="Main Image">
    </div>
  </div>

Agora vamos criar as nossas thumbnails ou miniaturas, e para isso vamos criar uma div com a class thumbnails <div class="thumbnails"> e dentro dessa div colocaremos todas as imagens que vamos ter na galeria.

Em cada imagem que tivermos vamos colocar o atributo onclick, porém dessa vez com a função changeImage(), que fará como o nome diz a troca de imagem sempre que a imagem for clicada.

    <div class="thumbnails">
      <img
        onclick="changeImage('imagem1.png')" // endereço da sua imagem
        src="imagem1.png" // colocar aqui o endereço da sua imagem
        alt="Thumbnail 1">
    </div>
    <!-- Add more thumbnails as needed -->

E do html é apenas isso para a parte da galeria. Agora vamos ao javascript, para criar as funções openModal() e changeImage() que inserimos no nosso html.

// Função para trocar a imagem principal quando uma miniatura é clicada
function changeImage(image) {
  var mainImg = document.getElementById('mainImg'); // Obtém a referência da imagem principal pelo seu ID
  mainImg.classList.add('fade-out'); // Adiciona a classe 'fade-out' para aplicar um efeito de transição
  setTimeout(function () { // Define um temporizador para alterar a imagem após um curto intervalo
    mainImg.src = image; // Altera o atributo src da imagem principal para exibir a nova imagem
    mainImg.classList.remove('fade-out'); // Remove a classe 'fade-out' para restaurar a opacidade da imagem
  }, 300); // Tempo para a transição de fade-out, em milissegundos
}

Vamos colocar também o css para estilizar a galeria:

body {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande',
    'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
  background-color: #cdcdcd;
}

header {
  padding: 40px;
  color: #faf60d;
  background-color: #000;
  font-weight: bold;
  font-size: 32px;
  margin-bottom: 20px;
  text-align: center;
  border-bottom: 2px solid #fff;
}

.galery {
  display: flex;
  justify-content: center;
  align-items: center;
}

.main-img {
  margin: 20px;
}

.thumbnails {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.thumbnails img {
  width: 100px;
  height: auto;
  margin-right: 10px;
  cursor: pointer;
}

.main-img img {
  transition: opacity 0.3s ease-out;
  height: 550px;
  width: 900px;
}

.fade-out {
  opacity: 0;
}


Continua...

Comentários