Ver Mensaje Individual
  #5 (permalink)  
Antiguo 19/01/2015, 17:07
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Scroll "animado"

Yo te dejo otro pero sin jQuery ya que no estamos en ese foro.

Código Javascript:
Ver original
  1. [].forEach.call(document.querySelectorAll("a"), function(a){
  2.     var elem = document.querySelector(a.getAttribute("href")), interval, val;
  3.     a.addEventListener("click", function(event){
  4.         val = 0;
  5.         event.preventDefault();
  6.         interval = setInterval(function(){
  7.             val += 10;
  8.             document.body.parentNode.scrollTop = val;
  9.             document.body.scrollTop = val;
  10.            
  11.             if (val >= elem.offsetTop){
  12.                 document.body.parentNode.scrollTop = elem.offsetTop;
  13.                 document.body.scrollTop = elem.offsetTop;
  14.                 clearInterval(interval);
  15.             }
  16.         }, 1);
  17.     }, false);
  18. });

DEMO

Lo que hago es simple. Recorro el conjunto de enlaces y por cada uno, tomo al elemento al que apuntan, además de crear dos variables que usaré más adelante. Luego, cuando de un clic sobre cualquier enlace, inicializo el valor de val en cero, prevengo el accionar del clickeado el cual sería el scrolling hasta la ubicación del elemento al que apunta.

Enseguida, utilizo un temporizador el cual asigno a interval y por cada ejecución de la función que contiene, sumo 10 a val y asigno dicho valor al atributo scrollTop de los elementos <body> y <html> para así ir moviendo el scroll de la página de a pocos. Cuando el valor de val sea mayor o igual que el de la ubicación del elemento al que el enlace está apuntando, fijamos el valor del atributo scrollTop de los elementos <body> y <html> en dicho valor (puede que a veces se pase algunos píxeles, muy pocos) y desactivo el temporizador. Todo esto se ejecutará cada milésima de segundo, dándole el efecto de desplazamiento suave y continuo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand