Ссылка на рабочий раствор: http://jsfiddle.net/pioul/N5bWm/2/
Вот резюме:
HTML:
<div id="wrapper">
<ul>
<li><a href="#one">one</a></li>
<li><a href="#two">two</a></li>
<li><a href="#three">three</a></li>
</ul>
<div id="container">
<div id="one">1</div>
<div id="two">2</div>
<div id="three">3</div>
</div>
</div>
JQuery:
// bind an action to the click event on your links
$("ul > li > a").bind("click", function(e){
e.preventDefault();
// get the "block" offset from the top of the #container div (and add to it the actual scroll of the div)
var scrollto = $($(this).attr("href")).position().top + $("#container").scrollTop();
// stop previous non-ended animations, and scroll smoothly to the new "block"
$("#container").stop(true).animate({ scrollTop: scrollto }, 1000);
});
CSS:
Единственное свойство, которое имеет значение, это position: relative
для #container
, чтобы получить точные значения из $().position()
.