Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

284
Visualizações
¿Cómo animo la opacidad de un elemento cuando se selecciona el desplazamiento?

Estoy al principio de aprender JS, en este momento lo que me molesta es que quiero animar la opacidad de un div cuando se detecta el desplazamiento. Tengo 2 opciones de lo que he encontrado en línea:

 window.addEventListener('scroll',function());

o

 window.onscroll()=function();

Usando la primera variante y la consola, veo que está detectando el desplazamiento, pero aquí viene mi problema.

Dejar:

 let loadingscreen=document.getElementsByTagName('div')[3]; loadingscreen.style.opacity="0";

¿Por qué no funcionará esto?

 window.addEventListener('scroll',()=>{ console.log("!"); //detecting the scroll in the console setInterval(function(){loadingscreen.style.opacity+=".1"},100);});`

La opacidad solo cambia una vez, creo que es de 0 a 0.1

¿Será que mi opacidad va de 0 a 0.1 a 0.11 a 0.111? Aunque no puedo entender por qué sería eso. ¡Gracias por tomarse su tiempo para leer esto, cualquier respuesta es apreciada!

Sé que el código no se ve tan ordenado, prometo que es mejor en mi vsc, tengo un pequeño problema con stackoverflow

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Esto se debe a que está agregando una cadena a otra cadena, no un número a otro número. Si desea agregar 0.1 de opacidad cuando se detecta desplazamiento, deberá analizar el valor de opacidad con parseInt(loadingscreen.style.opacity) , luego agregar 0.1 y luego aplicarlo a loadingscreen.style.opacity .

Sin embargo:

los eventos de desplazamiento pueden dispararse a una velocidad alta

consulte https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event

Entonces, si se desplaza una vez, su controlador de eventos tal vez se active 20 veces, y cada vez que se agregue un detector de eventos. Entonces, primero debe agregar { once: true } a sus opciones de eventListener.

En segundo lugar, está agregando más opacidad cada 100 milisegundos.

Si desea una buena animación, debe agregar una clase y animar la opacidad en CSS.

Considere el siguiente ejemplo:

 let loadingscreen = document.querySelector(".loadingscreen"); window.addEventListener("scroll", () => { loadingscreen.classList.add("scrolled"); }, { once: true } );
 body { height: 200vh; } div.loadingscreen { margin-top: 25%; height: 50%; width: 100%; background: red; opacity: 0; } div.loadingscreen.scrolled { opacity: 1; transition: opacity 1s linear; }
 <div class="loadingscreen"></div>

about 4 years ago · Juan Pablo Isaza Relatório

0

 const loadingscreen = document.getElementsByTagName('div')[2]; loadingscreen.style.opacity= 0; let incOpa = 0 function callIncOpacity(){ let refreshIntervalId = setInterval(function(){ console.log(incOpa); //detecting the scroll in the console if(incOpa < 1) { incOpa += 0.1; loadingscreen.style.opacity = incOpa } }, 10); setTimeout(function(){ clearInterval(refreshIntervalId); }, 100) } window.addEventListener('scroll',()=>{ if(incOpa < 1) callIncOpacity() });
 .content-container, .second-div, .third-div{ height: 500px; width: 100% }
 <!DOCTYPE html> <html> <head> <title>Title of the document</title> </head> <body> <div class="content-container"> <p> Test content </p> </div> <div class="second-div"> <p> test content 1 </p> </div> <div class="third-div"> <p> test content 2 </p> </div> </body> </html>

Dos cosas a tener en cuenta.

  1. La propiedad de estilo no se puede incrementar
  2. Cuando llama a setInterval en algún momento, es mejor detenerlo una vez que el trabajo haya terminado.
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda