Giải pháp này không còn được khuyến nghị do những thay đổi trong hành vi của trình duyệt. Xem các câu trả lời khác.
Về cơ bản, nếu một neo được sử dụng, chúng tôi liên kết với sự kiện cuộn cửa sổ. Ý tưởng là sự kiện cuộn đầu tiên phải thuộc về việc định vị lại tự động được thực hiện bởi trình duyệt. Khi điều này xảy ra, chúng tôi tự định vị lại và sau đó loại bỏ sự kiện ràng buộc. Điều này ngăn các cuộn trang tiếp theo làm hỏng hệ thống.
$(document).ready(function() {
if (window.location.hash) {
//bind to scroll function
$(document).scroll( function() {
var hash = window.location.hash
var hashName = hash.substring(1, hash.length);
var element;
//if element has this id then scroll to it
if ($(hash).length != 0) {
element = $(hash);
}
//catch cases of links that use anchor name
else if ($('a[name="' + hashName + '"]').length != 0)
{
//just use the first one in case there are multiples
element = $('a[name="' + hashName + '"]:first');
}
//if we have a target then go to it
if (element != undefined) {
window.scrollTo(0, element.position().top);
}
//unbind the scroll event
$(document).unbind("scroll");
});
}
});