suavizar section scrolling script link animate jquery scroll fragment-identifier

section - smooth scroll href jquery



Desplazamiento suave para anclar después de cargar nueva página (1)

Quiero navegar a un punto de anclaje en una página nueva, pero quiero que la página se cargue en la parte superior y luego desplace inmediatamente al punto de anclaje correspondiente. Se puede hacer esto?

Soy un novato completo con Javascript.

Este es el js que uso actualmente para un desplazamiento suave dentro de la página actual. Solo aplico una clase de ''scroll'' en el enlace.

¡Muchas gracias!

<script> $(function(){ $(''.scroll'').on(''click'',function(e) { e.preventDefault(); $(''html, body'').animate({ scrollTop: $($(this).attr(''href'')).offset().top + ''px'' }, 1000, ''swing''); }); }); </script>


Como los navegadores detectan automáticamente el hash y te llevan a esa posición ...
Se me ocurre que primero podría restablecer la posición de desplazamiento a 0 y luego realizar el desplazamiento suave.

Algo como...

// to top right away if ( window.location.hash ) scroll(0,0); // void some browsers issue setTimeout( function() { scroll(0,0); }, 1); $(function() { // your current click function $(''.scroll'').on(''click'', function(e) { e.preventDefault(); $(''html, body'').animate({ scrollTop: $($(this).attr(''href'')).offset().top + ''px'' }, 1000, ''swing''); }); // *only* if we have anchor on the url if(window.location.hash) { // smooth scroll to the anchor id $(''html, body'').animate({ scrollTop: $(window.location.hash).offset().top + ''px'' }, 1000, ''swing''); } });

Editar : Mueva el scroll(0,0) fuera de $(function(){...}); para evitar el parpadeo.
Además, se agregó Snippet con ejemplo de trabajo.
El efecto se aprecia mejor cuando se ve en pantalla completa

html, body { margin: 0; padding: 0; } .hidden-code { display: none; visibility: hidden; opacity: 0; } .header { background-color: #ccc; padding: 5px; } .header li { padding: 5px; margin: 5px; display: inline-block; } .articles > div { border: 1px solid; margin: 10px; padding: 250px 50px; background-color: #ccc; } div:before { content: attr(id); } .footer { text-align: center; }

<div class="header"> <ul> <li>page header title/navbar</li> <li><a class="scroll" href="#text-1">#text-1</a></li> <li><a class="scroll" href="#text-2">#text-2</a></li> <li><a class="scroll" href="#text-3">#text-3</a></li> <li><a class="scroll" href="#text-4">#text-4</a></li> <li><a class="scroll" href="#text-5">#text-5</a></li> <li><a class="scroll" href="#text-6">#text-6</a></li> <li><a class="scroll" href="#text-7">#text-7</a></li> <li><a class="scroll" href="#text-8">#text-8</a></li> </ul> </div> <div class="container"> <div class="content"> <div class="articles"> <div id="text-1"></div> <div id="text-2"></div> <div id="text-3"></div> <div id="text-4"></div> <div id="text-5"></div> <div id="text-6"></div> <div id="text-7"></div> <div id="text-8"></div> </div> </div> <div class="footer">company &copy; 2015</div> </div> <div class="hidden-code"> <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script> <script type="text/javascript"> // to top right away if ( window.location.hash ) scroll(0,0); // void some browsers issue setTimeout( function() { scroll(0,0); }, 1); // any position $(function() { // your current click function $(''.scroll'').on(''click'', function(e) { e.preventDefault(); $(''html, body'').animate({ scrollTop: $($(this).attr(''href'')).offset().top + ''px'' }, 1000, ''swing''); }); // *only* if we have anchor on the url if(window.location.hash) { // smooth scroll to the anchor id $(''html, body'').animate({ scrollTop: $(window.location.hash).offset().top + ''px'' }, 1000, ''swing''); } }); </script> </div>