Dưới đây là một ví dụ làm việc: http://jsfiddle.net/YWnzc/7/
Và mã (khá giống với của rizzle, với một vài thay đổi mà tôi sẽ giải thích):
$('a').hover(function(){
var selector = $(this).data('section');
var scrollAmount = $(selector).offset().top + $('#wrapper')[0].scrollTop - 129;
$('#wrapper').animate({scrollTop: scrollAmount}, 250);
},function(){
$('#wrapper').animate({scrollTop: 0}, 250);
});
Đầu tiên, var selector = $(this).data('section');
bec ause trong jsFiddle, thuộc tính href đã trả lại đường dẫn đầy đủ của trang + mã băm. Vì vậy, tôi đã thay đổi nó thành thuộc tính dữ liệu html5 (data-section
).
Dòng tiếp theo tương tự như sự cố của rizzle, ngoại trừ việc chúng tôi lấy phần bù của phần và thêm nó vào giá trị scrollTop
hiện tại của #wrapper
. Như ông đã chỉ ra, có một số vấn đề bù đắp kỳ lạ đang diễn ra vẫn còn, và tôi thấy rằng trừ 129 đã làm các trick. Trong khi con số 129 này có vẻ giống như thứ gì đó có khả năng phá vỡ, tôi đã thử nghiệm thay đổi kích thước của các phần, làm cho chúng không bằng nhau, vv và nó tiếp tục hoạt động. Tôi đang sử dụng Chrome và có lẽ một trình duyệt không phải là webkit sẽ cần một hằng số khác để trừ. Nhưng có vẻ như số 129 đó ít nhất là một số loại hằng số.
Phần còn lại phải khá tự giải thích.Một điều cần lưu ý: khi bạn di chuyển con trỏ qua các thẻ <a>
, nội dung của số #wrapper
div dường như nhảy xung quanh, nhưng đó chỉ là do phần mouseleave của sự kiện di chuột được kích hoạt khi con trỏ di chuyển. Tôi chắc chắn bạn có thể giải quyết điều đó mặc dù :)
Hãy coi chừng rằng hầu hết các trình duyệt Android và iOS cũ hơn đều không hỗ trợ di chuyển DIV's – rizzle