Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

116
Vistas
Guardar estado de animación al volver a la URL

Tengo un evento de desplazamiento JS simple que cuando un elemento llega a 50px de la parte superior de la ventana, el encabezado se anima y cambia de color, lo que se hace usando getBoundingClientRect().top < 50 en un elemento desencadenante. Esta funcionalidad solo se encuentra en la página de inicio del sitio.

¿Hay alguna forma de que cuando un usuario visite otra URL/página en el sitio y luego regrese a esta página a través de la flecha back del navegador, se siga aplicando el estado de animación anterior? Si la página se vuelve a cargar y comienza nuevamente en la parte superior, no importa, pero si vuelve a hacer clic en la página que usa este código, la transición del menú ocurre incluso si regresa a la parte de la página que estaba más allá del punto de activación. No quiero forzar la página a la parte superior cada vez porque esta página tendrá información que se puede descargar y buscar, por lo que sería un verdadero dolor volver a la parte superior de esa página cada vez.

He dado un ejemplo de trabajo a continuación y a través del enlace CodePen, el problema está, por supuesto, en CodePen y StackOverflow cuando va a una URL diferente y luego hace clic en la URL en cuestión, en realidad vuelve a cargar la página desde cero, lo que no hace No sucede como un comportamiento estándar del navegador en los sitios web cotidianos.

Codepen: https://codepen.io/anna_paul/pen/bGvPWRj

En ese back-end estoy usando PHP, y tengo acceso a esto si es necesario que haya una solución del lado del servidor.

Cualquier idea o sugerencia apreciada.

Nota: en el sitio real, este evento de desplazamiento se invoca a través de una función de rebote, pero lo eliminé para simplificar el código.

 let triggerElement = document.getElementById('trigger-element'), header = document.getElementById('h') let menuChange = function() { if(triggerElement.getBoundingClientRect().top < 50) { header.style.background = 'black' header.style.transition = '1s' } else { header.style.background = 'red' header.style.transition = '.15s' } } window.addEventListener('scroll', menuChange)
 body { margin: 0; height: 200vh; } #h { display: flex; justify-content: center; background: red; color: #fff; position: fixed; top: 0; width: 100%; } #trigger-element { margin-top: 150px; padding: 1rem; background:blue; color: #fff; }
 <header id="h"> <p>HEADER CONTENT</p> </header> <div id="trigger-element">Trigger Element</div>

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Recomiendo usar localStorage para este caso de uso particular, porque se puede implementar fácilmente junto con su método actual:

 const triggerElement = document.getElementById('trigger-element'); const header = document.getElementById('h'); const animationTriggered = localStorage.getItem('animationTriggered') === 'true'; let initialLoad = true; const menuChange = function() { if (animationTriggered && initialLoad) { header.style.background = 'black'; } else if (triggerElement.getBoundingClientRect().top < 50) { header.style.background = 'black'; header.style.transition = '1s'; localStorage.setItem('animationTriggered', 'true'); } else { header.style.background = 'red'; header.style.transition = '.15s'; localStorage.setItem('animationTriggered', 'false'); } initialLoad = false; } window.addEventListener('scroll', menuChange);

Esto recordará el estado anterior y aplicará el color de fondo negro si la animación se activó previamente. Esto agrega una pequeña cantidad de sobrecarga, pero en un escenario del mundo real no debería tener ningún impacto notable en el rendimiento de la aplicación.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda