Jump to content
Biel.

rotacionar imagens sem parar

Recommended Posts

Olá pessoal. O código abaixo rotaciona números sem parar. Como fazer para rotacionar imagens sem parar ?

<style>
#boxPrincipal{
    max-width:1650px; 
     width:100%;
	 height:200px;  

  margin:auto;
  padding:0px;
  text-align:center;
  background-color:#FFA;  
  border:1px solid blue;
  }
  
#box1 {
    width: 190px;
	height:60px;
	}
	
#imgTete{
width:100%;
height:100%;
opacity: 0;
transition: opacity 900ms;
}

</style>

....

<!-- <div id="boxPrincipal">

        <div id="box1">
              <a href="link0"><img src="image1.png" id="imgTete"   />link0</a>
              <a href="link1"><img src="image2.png" id="imgTete"  />link1</a>
              <a href="link2"><img src="image3.png" id="imgTete"  />link2</a>
              <a href="link3"><img src="image4.png" id="imgTete"  />link3</a>
              <a href="link4"><img src="image5.png" id="imgTete"  />link4</a>
        </div>
    
</div> -->

<p id="idggg"></p>

<script>

var executa;
    intervalo = 500,
    maximo = 10,
    element = document.getElementById('idggg');
   // imagens = document.querySelectorAll('#imgtete');
function funcStart() {
    var contador = 0;
	
      executa = setInterval(function () {
	  contador++;
      element.innerHTML += contador;
	  
     if(contador == maximo){
        contador=0; 
    element.innerHTML = '  ' + contador; 

}

    }, intervalo); 
	
}  


funcStart();

</script>

.....

 

Share this post


Link to post
Share on other sites

Eu faria diferente a implementação no caso de banner, dependendo da posição se for estilo propaganda usar esse metodo de display/hidden até funciona mas se o objetivo final é um carrosel as paginas utilizando uma abordagem de nos para que a troca de imagens seja suave e realmente deslizando e não imediata apenas exibindo.

 

Mas contudo eu mudaria um pouco esse código para ter uma leitura melhor e não sobrecarregaria o dom inserindo a cada segundo uma nova imagem obrigando o browser a carregar a imagem novamente.

 

CSS

.container-slider{
  width:300px;
  height: 60px;
  
  margin:0 auto;
  padding:0px;
  background:pink;
  text-align:center;
}

img {
  height: 100%;
}

img:not([active=true]) {
  display:none;
}

 

HTML

<div class="principal container-slider">
  <a>
    <img src="https://img.freepik.com/free-vector/flat-horizontal-sale-banner-template-with-photo_23-2149015614.jpg?t=st=1658791924~exp=1658792524~hmac=ac9992d18f718682ae9b0a894abbd160b831d4aa407878aabe530061da113bcf&w=1480"  active="true"/>
  </a>
  <a>
    <img src="https://img.freepik.com/free-vector/flat-horizontal-sale-banner-template-with-photo_23-2149000923.jpg?t=st=1658785975~exp=1658786575~hmac=3cbf700fc07f962a3d7a6f5e06670b131aa47833b9d08033bdd3f8079dd68915&w=1480" />
  </a>
  <a target="_blank" href="https://www.selectvacationproperties.com/wp-content/uploads/2020/02/AdobeStock_265268314.jpeg">
    <img src="https://www.selectvacationproperties.com/wp-content/uploads/2020/02/AdobeStock_265268314.jpeg"/>
  </a>
  <a target="_blank" href="https://d1csarkz8obe9u.cloudfront.net/posterpreviews/church-facebook-banner-design-template-7471ce255b02886530d575e1b4029e63_screen.jpg?ts=1584732765">
    <img src="https://d1csarkz8obe9u.cloudfront.net/posterpreviews/church-facebook-banner-design-template-7471ce255b02886530d575e1b4029e63_screen.jpg?ts=1584732765"/>
  </a>
</div>

 

JS

function showSlides(containerId, intervalTime) {
  let elementSlider = document.querySelector(containerId);
  let intervalRef = setInterval('setActiveSlide("'+ containerId +'")', intervalTime);
  
  enableSlideMouseEvents(containerId, elementSlider, intervalRef, intervalTime);
}

function enableSlideMouseEvents(containerId, elementSlider, intervalRef, intervalTime) {
  elementSlider.addEventListener("mouseover", function(event){
    clearInterval(intervalRef);
  });

  elementSlider.addEventListener("mouseleave", function(event){
    intervalRef = setInterval('setActiveSlide("'+ containerId +'")', intervalTime);
  });
}

function setActiveSlide(container) {
  let images = document.querySelectorAll(`${container} img`);
  
  let removeActiveAttribute = () => {
   images.forEach(image => image.removeAttribute("active"));
  };
  
  let toggleSlide = (indexImageToActive) => {
    removeActiveAttribute();
    images[indexImageToActive].setAttribute("active", true);
  }; 
 
  let indexActive = Array.from(images).findIndex((image, index) => {
    return image.getAttribute("active") === "true";
  });

  if(indexActive == images.length - 1){
    toggleSlide(0);
  }
  else {
    toggleSlide(indexActive+1);
  }
}

showSlides(".principal", 1000);

JSBin ex: https://jsbin.com/finipeponi/edit?html,js,output

Share this post


Link to post
Share on other sites
Em 01/08/2022 at 21:31, wanderval disse:

Eu faria diferente a implementação no caso de banner, dependendo da posição se for estilo propaganda usar esse metodo de display/hidden até funciona mas se o objetivo final é um carrosel as paginas utilizando uma abordagem de nos para que a troca de imagens seja suave e realmente deslizando e não imediata apenas exibindo.

 

Mas contudo eu mudaria um pouco esse código para ter uma leitura melhor e não sobrecarregaria o dom inserindo a cada segundo uma nova imagem obrigando o browser a carregar a imagem novamente.

 

CSS


.container-slider{
  width:300px;
  height: 60px;
  
  margin:0 auto;
  padding:0px;
  background:pink;
  text-align:center;
}

img {
  height: 100%;
}

img:not([active=true]) {
  display:none;
}

 

HTML


<div class="principal container-slider">
  <a>
    <img src="https://img.freepik.com/free-vector/flat-horizontal-sale-banner-template-with-photo_23-2149015614.jpg?t=st=1658791924~exp=1658792524~hmac=ac9992d18f718682ae9b0a894abbd160b831d4aa407878aabe530061da113bcf&w=1480"  active="true"/>
  </a>
  <a>
    <img src="https://img.freepik.com/free-vector/flat-horizontal-sale-banner-template-with-photo_23-2149000923.jpg?t=st=1658785975~exp=1658786575~hmac=3cbf700fc07f962a3d7a6f5e06670b131aa47833b9d08033bdd3f8079dd68915&w=1480" />
  </a>
  <a target="_blank" href="https://www.selectvacationproperties.com/wp-content/uploads/2020/02/AdobeStock_265268314.jpeg">
    <img src="https://www.selectvacationproperties.com/wp-content/uploads/2020/02/AdobeStock_265268314.jpeg"/>
  </a>
  <a target="_blank" href="https://d1csarkz8obe9u.cloudfront.net/posterpreviews/church-facebook-banner-design-template-7471ce255b02886530d575e1b4029e63_screen.jpg?ts=1584732765">
    <img src="https://d1csarkz8obe9u.cloudfront.net/posterpreviews/church-facebook-banner-design-template-7471ce255b02886530d575e1b4029e63_screen.jpg?ts=1584732765"/>
  </a>
</div>

 

JS


function showSlides(containerId, intervalTime) {
  let elementSlider = document.querySelector(containerId);
  let intervalRef = setInterval('setActiveSlide("'+ containerId +'")', intervalTime);
  
  enableSlideMouseEvents(containerId, elementSlider, intervalRef, intervalTime);
}

function enableSlideMouseEvents(containerId, elementSlider, intervalRef, intervalTime) {
  elementSlider.addEventListener("mouseover", function(event){
    clearInterval(intervalRef);
  });

  elementSlider.addEventListener("mouseleave", function(event){
    intervalRef = setInterval('setActiveSlide("'+ containerId +'")', intervalTime);
  });
}

function setActiveSlide(container) {
  let images = document.querySelectorAll(`${container} img`);
  
  let removeActiveAttribute = () => {
   images.forEach(image => image.removeAttribute("active"));
  };
  
  let toggleSlide = (indexImageToActive) => {
    removeActiveAttribute();
    images[indexImageToActive].setAttribute("active", true);
  }; 
 
  let indexActive = Array.from(images).findIndex((image, index) => {
    return image.getAttribute("active") === "true";
  });

  if(indexActive == images.length - 1){
    toggleSlide(0);
  }
  else {
    toggleSlide(indexActive+1);
  }
}

showSlides(".principal", 1000);

JSBin ex: https://jsbin.com/finipeponi/edit?html,js,output

Esqueci de um detalhe importante: No css  esqueci de trocar o seletor img  por  .imgAprendiz . Fiz alteração no css e javascript  e alterei  img por .imgAprendiz e o slide parou de funcionar . Como sou iniciante em javascript  não conseguir fazer funcionar. Manda uma luz ae pessoal. Obrigado !

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Biel.
      Olá pessoal. Ao digitar um texto qualquer no input e pressionar submit o valor do atributo href é alterado temporariamente. Como alterar permanentemente no corpo do documento  o valor do atributo href, digitando um nome de link qualquer no campo input e em seguida submit ?
      <!DOCTYPE html> <html> <head> <style> input { width: 100%; font-size: 20px; } textarea { width: 100%; font-size: 16px; height: 200px; } .class88 { margin-top: 50px; padding: 10px; max-width: 100px; } </style> </head> <body> <h2> alterar valor do atributo href</h2> digite um texto qualquer <input type="text" class="class42" value=""> <a id="linkToChange" href="teste5.php" class="class43"></a> <input type="submit" class="class88" value="enviar" onclick="alterarHref()"> <script> function alterarHref() { // pega o valor da class42 var valorDaclass42 = document.querySelector('.class42').value.trim(); // altera o valor do atributo href para o valorDaclass42 sugerido document.querySelector('.class43').setAttribute('href', valorDaclass42); console.log("Href alterado:", valorDaclass42); } </script> </body> </html>  
    • By Biel.
      Olá pessoal. BannerA está funcionando normalmente. Como usar mesmo script para bannerB e bannerC.
      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Banner Aleatório</title> <style> /* Estilos opcionais para o banner */ #divPai { margin: auto; border: 2px solid red; } #bannerA { width: 240px; height: 480px; overflow: hidden; position: relative; } #bannerA img { width: 100%; height: auto; position: absolute; top: 0; left: 0; transition: 1.5s ease-in; } #bannerA img.active { opacity: 1; } </style> </head> <body> <div id="divPai"> <div id="bannerA" class="bannerA"> <a href="link1"><img src="image1.jpg" alt="Imagem 1"></a> <a href="link2"><img src="image2.jpg" alt="Imagem 2"></a> <a href="link3"><img src="image3.jpg" alt="Imagem 3"></a> </div> <!-- <hr> <div id="bannerB" class="bannerB"> <a href="link4"><img src="image4.jpg" alt="Imagem 4"></a> <a href="link5"><img src="image5.jpg" alt="Imagem 5"></a> <a href="link6"><img src="image6.jpg" alt="Imagem 6"></a> </div> <hr> <div id="bannerC" class="bannerC"> <a href="link7"><img src="image7.jpg" alt="Imagem 7"></a> <a href="link8"><img src="image8.jpg" alt="Imagem 8"></a> <a href="link9"><img src="image9.jpg" alt="Imagem 9"></a> </div> --> </div> <hr> <script> document.addEventListener("DOMContentLoaded", function() { // var banner = document.getElementById("divPai"); // var images = banner.querySelectorAll("img"); var images = document.querySelectorAll("#bannerA img"); // Função para exibir uma imagem aleatória function showRandomImage() { // Escolhe aleatoriamente um índice de imagem var randomIndex = Math.floor(Math.random() * images.length); // Define todas as imagens como ocultas images.forEach(function(img) { img.style.display = "none"; }); // Exibe a imagem aleatória images[randomIndex].style.display = "block"; } // Chama a função inicialmente e define um intervalo para exibir novas imagens a cada 3 segundos showRandomImage(); setInterval(showRandomImage, 1000); // makeSliderKind('.bannerA', 1000); // makeSliderKind('.bannerB', 2000); // makeSliderKind('.bannerC', 3000); }); </script> </body> </html>  
    • By Biel.
      Olá pessoal. O banner abaixo está funcionando e o link acompanha o banner, até aqui tudo ok ! Quero muito fazer uma transição suave entre uma image e outra, colocando as propiedades e valores no css ou diretamente no javascript e nada de propiedades e valores no html através do style . Se possível coloque no código somente o que precisa . Obrigado!
      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Banner</title> <style> /* Estilos opcionais para o banner */ .banner { width: 240px; height: 480px; overflow: hidden; position: relative; } .banner img { width: 100%; height: auto; position: absolute; top: 0; left: 0; transition: 1.5s ease-in; } .banner img.active { opacity: 1; } </style> </head> <body> <div class="banner" id="banner"> <a href="link1" class="ggg"><img src="image1.jpg" alt="Imagem 1"></a> <a href="link2" class="ggg"><img src="image2.jpg" alt="Imagem 2"></a> <a href="link3" class="ggg"><img src="image3.jpg" alt="Imagem 3"></a> <a href="link4" class="ggg"><img src="image4.jpg" alt="Imagem 4"></a> <a href="link5" class="ggg"><img src="image5.jpg" alt="Imagem 5"></a> </div> <script> document.addEventListener("DOMContentLoaded", function() { var banner = document.getElementById("banner"); var images = banner.querySelectorAll("img"); // Função para exibir uma imagem aleatória function showRandomImage() { // Escolhe aleatoriamente um índice de imagem var randomIndex = Math.floor(Math.random() * images.length); // Define todas as imagens como ocultas images.forEach(function(img) { img.style.display = "none"; }); // Exibe a imagem aleatória images[randomIndex].style.display = "block"; } // Chama a função inicialmente e define um intervalo para exibir novas imagens a cada 3 segundos showRandomImage(); setInterval(showRandomImage, 3000); }); </script> </body> </html>  
       
    • By Biel.
      Olá pessoal. O banner abaixo está funcionando normalmente, mas a transição entre uma imagem e outra está um tanto truculenta. Quero deixar suave. Como resolver isso? Obrigado !
      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>transition suave entre uma image e outra</title> <style> #banner { width: 240px; height: 480px; overflow: hidden; position: relative; } #bannerGG { width: 100%; height: auto; position: absolute; top: 0; left: 0; opacity: 0; transition: opacity 1s ease-in-out; } /* #tete:active { opacity: 1; } */ </style> </head> <body> <div id="banner"> <img class="bannerGG" src="imagem1.png" alt="Image 1"> <img class="bannerGG" src="imagem2.png" alt="Image 2"> <img class="bannerGG" src="imagem3.png" alt="Image 3"> <img class="bannerGG" src="imagem4.png" alt="Image 4"> <img class="bannerGG" src="imagem5.png" alt="Image 5"> </div> <script> const image = document.querySelectorAll('.bannerGG'); const banner = document.getElementById('banner'); function showRandomImage() { const randomIndex = Math.floor(Math.random() * image.length); const randomImage = image[randomIndex]; const imgElement = document.createElement('img'); imgElement.src = randomImage.src; const linkElement = document.createElement('a'); linkElement.appendChild(imgElement); banner.innerHTML = ''; banner.appendChild(linkElement); } showRandomImage(); setInterval(showRandomImage, 3000); </script> </body> </html>  
    • By Biel.
      Olá pessoal. O banner abaixo está funcionando, mas quero que o link do banner venha da tag a  e não do javascript . Como resolver? 
      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Mostrar link do banner que está na tag a</title> <style> #banner { width: 240px; height: 480px; overflow: hidden; position: relative; } .banner-img { width: 100%; height: 100%; object-fit: cover; position: absolute; /* opacity: 0; */ transition: opacity 0.5s ease-in-out; } .banner-link { display: block; width: 100%; height: 100%; } </style> </head> <body> <div id="banner"> <a href="link147"><img class="banner-img" src="imagem1.png" alt="Image 1"></a> <a href="link254"><img class="banner-img" src="imagem2.png" alt="Image 2"></a> <a href="link350"><img class="banner-img" src="imagem3.png" alt="Image 3"></a> <a href="link462"><img class="banner-img" src="imagem4.png" alt="Image 4"></a> <a href="link538"><img class="banner-img" src="imagem5.png" alt="Image 5"></a> </div> <script> const images = document.querySelectorAll('.banner-img'); const banner = document.getElementById('banner'); function showRandomImage() { const randomIndex = Math.floor(Math.random() * images.length); const randomImage = images[randomIndex]; const imgElement = document.createElement('img'); imgElement.src = randomImage.src; imgElement.alt = randomImage.alt; imgElement.classList.add('banner-img'); const linkElement = document.createElement('a'); // linkElement.appendChild(imgElement); linkElement.href = randomImage.href; linkElement.classList.add('banner-link'); linkElement.href = "page" + (randomIndex + 1) + ".html"; // Link para cada imagem linkElement.appendChild(imgElement); banner.innerHTML = ''; banner.appendChild(linkElement); } showRandomImage(); setInterval(showRandomImage, 1000); </script> </body> </html> Resolvido,  Obrigado a todos !
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.