2011-07-13 30 views
102

Im tring để tạo hiệu ứng cuộn cho một ID cụ thể khi tải trang. Tôi đã thực hiện rất nhiều nghiên cứu và đã xem xét điều này:Di chuyển động đến ID khi tải trang

$("html, body").animate({ scrollTop: $('#title1').height() }, 1000); 

nhưng điều này dường như bắt đầu từ ID và hoạt ảnh ở đầu trang?

HTML (đó là nửa đường xuống trang) chỉ đơn giản là:

<h2 id="title1">Title here</h2> 
+1

Đây không phải là câu trả lời, nhưng tôi khuyên bạn nên sử dụng plugin "scrollTo" của Ariel Flesler; nó có rất nhiều tính năng cho panning về một trang, và một vài phần mở rộng cho plugin cho các trường hợp phổ biến (ví dụ, bạn có thể tìm thấy plugin "LocalScroll" của mình hữu ích cho việc cuộn đến href của một liên kết nếu nó nằm trên cùng một trang). Bạn có thể tải plugin tại đây: http://flesler.blogspot.com/2007/10/jqueryscrollto.html – Faisal

+0

OP cũ nhưng tôi sẽ chia sẻ bài đăng này cho những người khác đến từ SE. Đây là một bài viết chia sẻ một chức năng đơn giản giải quyết vấn đề: http://smartik.ws/2015/01/super-simple-animate-scroll-to-id-using-jquery/ –

Trả lời

276

Bạn chỉ được di chuyển chiều cao của nguyên tố của bạn. offset() trả về tọa độ của một yếu tố liên quan đến các tài liệu, và top param sẽ cung cấp cho bạn khoảng cách của phần tử bằng pixel dọc theo trục y:

$("html, body").animate({ scrollTop: $('#title1').offset().top }, 1000); 

Và bạn cũng có thể thêm một sự chậm trễ với nó:

$("html, body").delay(2000).animate({scrollTop: $('#title1').offset().top }, 2000); 
+1

Điều gì về tính năng cuộn tự động tôi đi "WOW COOL !!"? Có lẽ đó là sự đơn giản của giải pháp của bạn. – theblang

+0

Tôi cần phải cuộn phần tử vào chế độ xem khi tải trang nhưng có hai vấn đề: a) sử dụng "html, body" cho hai lần gọi lại (một cho mỗi phần tử được so khớp). b) Tùy thuộc vào trình duyệt của cơ thể hoặc html hoạt động. Vì vậy, tôi đã thực hiện một ý chính mà bạn có thể thích ứng để sử dụng trong dự án của mình để đảm bảo tính năng cuộn xem hoạt động trên trình duyệt "bất kỳ" nào và bạn sẽ chỉ nhận được một cuộc gọi lại khi hoạt ảnh kết thúc. https: //gist.github.com/netsi1964/4ddffe1ae14e05220d25 – Netsi1964

+1

Điều này không thực sự chính xác. Bạn thực sự nên xem xét vị trí cuộn hiện tại của phần tử hoặc phần tử mà chúng tôi đang cố gắng 'cuộn'. Với ý nghĩ đó, bạn sẽ thêm vị trí cuộn hiện tại của 'body' vào vị trí' offset(). Top' của phần tử mà chúng ta muốn xem, Tổng kết quả là giá trị mà chúng ta muốn cuộn đến.' $ (' html, body ') animate ({scrollTop: ($ (' html, body '). scrollTop() + $ (' # title1 '). offset(). top)}, 1000); ' – magreenberg

3

Có một plugin jquery cho việc này. Nó cuộn tài liệu đến một phần tử cụ thể, để nó hoàn toàn nằm giữa khung nhìn. Nó cũng hỗ trợ hoạt hình dễ dàng để hiệu ứng cuộn trông siêu mượt mà. Kiểm tra this link.

Trong trường hợp của bạn mã là

$("#title1").animatedScroll({easing: "easeOutExpo"}); 
+0

"Nó cũng hỗ trợ hình ảnh động dễ dàng để hiệu ứng cuộn trông siêu mịn" Thật không may, điều đó không đúng. Nếu máy tính chậm vì lý do nào đó, nó chỉ tiếp tục nhảy mà không thực sự di chuyển đúng cách. – brunoais

+0

Cuộn mượt mà yêu cầu phải tính nhiều pixel. Chắc chắn một "máy tính" chậm (nhiều GPU) không thể làm điều này nhưng do thiếu ALU đủ. Vì vậy, nói chung ông là đúng. Và thực sự dễ dàng di chuyển lib. – Roland

1

hãy thử với mã sau. làm cho các yếu tố với tên lớp trang-di chuyển và giữ tên id để href các liên kết tương ứng

$('a.page-scroll').bind('click', function(event) { 
     var $anchor = $(this); 
     $('html, body').stop().animate({ 
      scrollTop: ($($anchor.attr('href')).offset().top - 50) 
     }, 1250, 'easeInOutExpo'); 
     event.preventDefault(); 
    }); 
4

giải pháp javascript tinh khiết với scrollIntoView() chức năng:

document.getElementById('title1').scrollIntoView({block: 'start', behavior: 'smooth'});
<h2 id="title1">Some title</h2>

T.B. thông số 'mịn' hiện hoạt động từ Chrome 61 dưới dạng julien_c được đề cập trong các nhận xét.

+1

Hoạt động ngay bây giờ (từ Chrome 61) –

Các vấn đề liên quan