Voici ce que j'utilise, ça fonctinne très bien et c'est très simple :
// Lorsqu'on click sur un lien commencent par #
$('a[href^=#]').click(function(){
// On récupère la position top de l'élément vers lequel on veut aller
var location = $($(this).attr('href')).offset().top;
// On anime la position du body vers celle de la cible
$('body').animate({
scrollTop: location
}, 500);
// On empêche le lien de fonctionner
return false;
})