La mejor manera de suavizar el desplazamiento a un enlace interno

He buscado y veo muchos ejemplos sobre este tema, pero no pude hacerlo de la mejor manera.

Solo estoy un poco familiarizado con JS y jQuery y quiero preguntar sobre el desplazamiento suave.

  

Tengo una navegación como esta. Esto se desplaza instantáneamente. Pero quiero hacerlo lentamente. ¿Cuál es la forma más corta y fácil para esto? Estoy más familiarizado con JS y no quiero descargar y usar los complementos de JS.

  1. Necesito conocer la syntax completa con un método de clic para mis enlaces (todos tienen la misma clase)
  2. ¿Debo eliminar href park de los enlaces?

Esperando tu ayuda y todavía buscando

EDITAR !!!: En esta situación, necesito una sola clase. ¿Es posible dar esta propiedad para múltiples clases?

  function scrollToElement (selector) { $('html, body').animate({ scrollTop: $(selector).offset().top }, 2000); }; $(document).on('click', 'a.uruna', function () { scrollToElement($(this).attr('href')); }); 

Tengo (‘click’, ‘a.uruna’, function (), ¿cómo puedo insertar otra clase aquí o debo escribir:

 $(document).on('click', 'a.uruna', function () { scrollToElement($(this).attr('href')); }); $(document).on('click', 'a.new', function () { scrollToElement($(this).attr('href')); }); 

HTML:

  

JS:

 function scrollToElement (selector) { $('html, body').animate({ scrollTop: $(selector).offset().top }, 2000); }; $(document).on('click', 'a.uruna', function () { scrollToElement($(this).attr('href')); }); 

o

 function scrollToElement (obj) { $('html, body').animate({ scrollTop: obj.offset().top }, 2000); }; $(document).on('click', 'a.uruna', function () { scrollToElement($(this)); }); 

Noté que con la respuesta de JohnJohnGa obtienes un “parpadeo” (al menos para Google Chrome) donde la página aparece inmediatamente en la posición href del ancla y vuelve antes de que se desplace allí sin problemas. Puede que esto no se note con una computadora rápida, pero definitivamente se notó en la computadora en la que estaba trabajando. Para solucionar esto, hice lo siguiente:

 $('a.page-scroll').bind('click', function(event) { var $anchor = $(this); $('html, body').stop().animate({ scrollTop: $($anchor.attr('href')).offset().top }, 1500, 'easeInOutExpo'); event.preventDefault(); window.history.pushState(null, null, $($anchor.attr('href')).selector); }); 

Tenga en cuenta que esto evita que el evento predeterminado se window.history.pushState y luego use window.history.pushState para imitarlo. Para los navegadores antiguos que no admiten pushState , se desplazará a la ubicación correcta, pero no actualizará la ubicación de la dirección.

Demostración en vivo: http://jsfiddle.net/wVEAy/2/

Tenga en cuenta que para este caso necesitaría tener un elemento con el mismo id que el especificado en la etiqueta href de su enlace:

 function scrollToElement (selector) { $('html, body').animate({ scrollTop: $(selector).offset().top }, 2000); }; $(document).on('click', 'a.uruna', function () { scrollToElement($(this).attr('href')); });