Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

127
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!