Para que tenga un efecto de desplazamiento suave, puedes ejecutar el mismo en intervalos en los que el desplazamiento se realice en espacios cortos y, al final de cada uno, verificarías que la cantidad desplazada sea mayor o igual al límite que es la ubicación del elemento; de ser así, terminarías el intervalo de repeticiones, para lo cual te bastaría con utilizar un temporizador cíclico.
Un ejemplo:
Código Javascript
:
Ver originalvar intervalo = setInterval(function(){
window.scrollTo(0, window.scrollY + 5);
if (window.scrollY >= elemento.offsetTop) clearInterval(intervalo);
}, 10);
Un saludo