Có rất nhiều ví dụ về việc cuộn trơn tru bằng các thư viện JS như jQuery, Mootools, Prototype, v.v.
Ví dụ sau đây là trên JavaScript thuần túy. Nếu bạn không có jQuery / Mootools / Prototype trên trang hoặc bạn không muốn trang quá tải với các thư viện JS nặng, ví dụ này sẽ hữu ích.
http://jsfiddle.net/rjSfP/
Phần HTML:
<div class="first"><button type="button" onclick="smoothScroll(document.getElementById('second'))">Click Me!</button></div>
<div class="second" id="second">Hi</div>
Phần CSS:
.first {
width: 100%;
height: 1000px;
background: #ccc;
}
.second {
width: 100%;
height: 1000px;
background: #999;
}
Phần JS:
window.smoothScroll = function(target) {
var scrollContainer = target;
do {
scrollContainer = scrollContainer.parentNode;
if (!scrollContainer) return;
scrollContainer.scrollTop += 1;
} while (scrollContainer.scrollTop == 0);
var targetY = 0;
do {
if (target == scrollContainer) break;
targetY += target.offsetTop;
} while (target = target.offsetParent);
scroll = function(c, a, b, i) {
i++; if (i > 30) return;
c.scrollTop = a + (b - a) / 30 * i;
setTimeout(function(){ scroll(c, a, b, i); }, 20);
}
scroll(scrollContainer, scrollContainer.scrollTop, targetY, 0);
}