Carrossel com Temporizador

<div class="carrossel-container">

<div class="carrossel-simples" id="carrossel-simples">

<!-- SLIDE 1 - Personalize com seu link e imagem -->

<div class="carrossel-slide">

<a href="#link-slide-1" class="slide-link" data-url="https://seu-link-aqui-1.com">

<img src="URL-DA-SUA-IMAGEM-1.jpg" alt="Descrição da imagem 1">

</a>

</div>


<!-- SLIDE 2 - Personalize com seu link e imagem -->

<div class="carrossel-slide">

<a href="#link-slide-2" class="slide-link" data-url="https://seu-link-aqui-2.com">

<img src="URL-DA-SUA-IMAGEM-2.jpg" alt="Descrição da imagem 2">

</a>

</div>


<!-- SLIDE 3 - Personalize com seu link e imagem -->

<div class="carrossel-slide">

<a href="#link-slide-3" class="slide-link" data-url="https://seu-link-aqui-3.com">

<img src="URL-DA-SUA-IMAGEM-3.jpg" alt="Descrição da imagem 3">

</a>

</div>


<!-- Você pode adicionar mais slides duplicando o bloco acima -->

</div>


<!-- Indicadores (pontos) no rodapé -->

<div class="indicadores-container" id="indicadores-container"></div>

</div>



<style>

.carrossel-container {

width: 100%;

max-width: 1200px;

margin: 0 auto;

position: relative;

overflow: hidden;

}



.carrossel-simples {

display: flex;

transition: transform 0.5s ease;

width: 100%;

}



.carrossel-slide {

min-width: 100%;

position: relative;

overflow: hidden;

}



.slide-link {

display: block;

width: 100%;

height: 100%;

position: relative;

cursor: pointer;

}



.carrossel-slide img {

width: 100%;

height: auto;

display: block;

object-fit: cover;

}



.indicadores-container {

position: absolute;

bottom: 15px;

left: 0;

right: 0;

display: flex;

justify-content: center;

z-index: 10;

}



.indicador {

width: 10px;

height: 10px;

border-radius: 50%;

background-color: rgba(255, 255, 255, 0.5);

margin: 0 5px;

cursor: pointer;

transition: background-color 0.3s ease;

}



.indicador.ativo {

background-color: #ffffff;

}



@media (max-width: 768px) {

.indicador {

width: 8px;

height: 8px;

margin: 0 4px;

}

}

</style>



<script>

document.addEventListener('DOMContentLoaded', function() {

// Configuração do carrossel

const carrossel = document.getElementById('carrossel-simples');

const slides = carrossel.querySelectorAll('.carrossel-slide');

const indicadoresContainer = document.getElementById('indicadores-container');


let slideAtual = 0;

const totalSlides = slides.length;

let temporizador = null;

const intervalo = 5000; // 5 segundos entre cada slide


// Cria os indicadores (pontos) para navegação

for (let i = 0; i < totalSlides; i++) {

const indicador = document.createElement('div');

indicador.classList.add('indicador');

if (i === 0) indicador.classList.add('ativo');


indicador.addEventListener('click', function(e) {

e.preventDefault();

irParaSlide(i);

reiniciarTemporizador();

});


indicadoresContainer.appendChild(indicador);

}


const indicadores = indicadoresContainer.querySelectorAll('.indicador');


// Função para atualizar o carrossel

function atualizarCarrossel() {

carrossel.style.transform = `translateX(-${slideAtual * 100}%)`;


// Atualiza os indicadores

indicadores.forEach((ind, index) => {

if (index === slideAtual) {

ind.classList.add('ativo');

} else {

ind.classList.remove('ativo');

}

});

}


// Função para ir para um slide específico

function irParaSlide(indice) {

slideAtual = indice;

if (slideAtual < 0) slideAtual = totalSlides - 1;

if (slideAtual >= totalSlides) slideAtual = 0;

atualizarCarrossel();

}


// Função para avançar para o próximo slide

function proximoSlide() {

irParaSlide(slideAtual + 1);

}


// Função para iniciar o temporizador de autoplay

function iniciarTemporizador() {

temporizador = setInterval(proximoSlide, intervalo);

}


// Função para reiniciar o temporizador

function reiniciarTemporizador() {

clearInterval(temporizador);

iniciarTemporizador();

}


// Método seguro para redirecionamento

function redirecionarSeguro(url) {

if (!url) return;


// Cria um elemento <form> temporário para submissão segura

const form = document.createElement('form');

form.method = 'GET';

form.action = url;

form.target = '_blank';

document.body.appendChild(form);

form.submit();

document.body.removeChild(form);

}


// Adiciona manipuladores de clique para os links

const links = carrossel.querySelectorAll('.slide-link');

links.forEach(function(link) {

link.addEventListener('click', function(e) {

e.preventDefault();

const url = this.getAttribute('data-url');

if (url) {

redirecionarSeguro(url);

}

});

});


// Evento de swipe para dispositivos móveis

let touchStartX = 0;

let touchEndX = 0;


carrossel.addEventListener('touchstart', function(e) {

touchStartX = e.changedTouches[0].screenX;

});


carrossel.addEventListener('touchend', function(e) {

touchEndX = e.changedTouches[0].screenX;

handleSwipe();

});


function handleSwipe() {

if (touchEndX < touchStartX - 50) {

// Swipe da direita para a esquerda

proximoSlide();

reiniciarTemporizador();

} else if (touchEndX > touchStartX + 50) {

// Swipe da esquerda para a direita

irParaSlide(slideAtual - 1);

reiniciarTemporizador();

}

}


// Pausa o carrossel quando o mouse está sobre ele

carrossel.addEventListener('mouseenter', function() {

clearInterval(temporizador);

});


// Reinicia o carrossel quando o mouse sai

carrossel.addEventListener('mouseleave', function() {

iniciarTemporizador();

});


// Inicia o carrossel

iniciarTemporizador();

});

</script>