Làm cách nào để lấy vị trí cuộn của tài liệu?


82

Làm cách nào để lấy giá trị vị trí cuộn của tài liệu?

Câu trả lời:


46
$(document).height() //returns window height

$(document).scrollTop() //returns scroll position from top of document

Tôi cũng nghĩ theo cách tương tự, nhưng tại sao console.log ($ (this) .scrollTop ()) = 1187 console.log ($ (this) .height ()) = 1762 nó khác nhiều như vậy? Đối với 575px nếu tôi đã cuộn xuống cuối trang. 575px đó đã biến đi đâu? Thanh cuộn không được là 576px :)
Ai đó

3
Baaah lại là lỗi của tôi. Tôi đang nhìn vào thanh cuộn với cửa sổ firebug đã mở. Ofc bây giờ có thể là 576px. :) Cảm ơn tôi đoán chủ đề đã đóng.
Ai đó

101
-1 - Điều đó rất hay, nhưng không trả lời câu hỏi, đó là về scrollHeight.
Wayne

8
Đúng, đây là một câu hỏi jquery. Nhưng cả $ (document) .height () hoặc $ (document) .scrollTop () đều không cung cấp thông tin mong muốn. Yêu cầu dành cho scrollHeight. Giá trị scrollHeight là tổng chiều cao có sẵn cho một phần tử (nếu nó có thể cuộn được, giá trị đó có thể lớn hơn chiều cao của nó). scrollTop trả về khoảng cách từ đầu phần tử. Không trả lời tổng chiều cao có sẵn là bao nhiêu. Xem help.dottoro.com/ljbixkkn.php để hiểu về scrollHeight
teynon

4
Đây được đánh dấu là câu trả lời vì nó trả lời câu hỏi dự định của người hỏi, đó là về độ cao mà tài liệu hiện đang được cuộn ... ergo "scrollHeight." Thật trùng hợp khi cái tên này được sử dụng trong một bối cảnh khác.
Chase Sandmann

177

Đây là cách lấy scrollHeightphần tử thu được bằng cách sử dụng bộ chọn jQuery:

$(selector)[0].scrollHeight

Nếu selectorlà id của phần tử (ví dụ elemId), nó được đảm bảo rằng mục được lập chỉ mục 0 của mảng sẽ là phần tử bạn muốn chọn và scrollHeightsẽ chính xác.


12
Chăm sóc, theo cơ sở tri thức của Mozilla, nó không được hỗ trợ từ phiên bản IE ít hơn 8,0 developer.mozilla.org/en/DOM/element.scrollHeight
yodabar

2
Đồng ý với @Tomas, hãy sử dụng tính trừu tượng của jQuery để xử lý tốt hơn các câu hỏi thường gặp của trình duyệt. Ví dụ trên có thể được sửa đổi để $ (selector) .offset () hàng đầu.
Bob Gregor

3
Ừm, không có $ (document) .offset () trả về null và .offset () không liên quan gì đến vị trí của các thanh cuộn của trình duyệt (.offset () trả về tọa độ của các mục liên quan đến tài liệu). Tôi đồng ý rằng chúng ta nên sử dụng jQuery khi có thể, nhưng rõ ràng, vì không có hỗ trợ trình duyệt chéo nào cho việc này, jQuery không cung cấp tính năng trừu tượng cho nó.
BrainSlugs83

2
Bạn cũng có thể thực hiện $ (selector) .get (0) .scrollHeight
Ally

1
@Dmitri Zaitsev .scrollHeight là thuộc tính nút DOM, không phải thuộc tính jQuery.
Zemljoradnik

45

Nếu bạn đang sử dụng Jquery 1.6 trở lên, hãy sử dụng prop để truy cập giá trị.

$(document).prop('scrollHeight')

Các phiên bản trước được sử dụng để lấy giá trị từ attr nhưng không đăng 1.6.


12
Điều này trả về "không xác định" cho tôi với jQuery 1.7.1, cũng như $ (tài liệu) .attr ("scrollHeight").
Michael

5
Đó là bởi vì nó thiếu thành phần cơ thể. Nó cần phải là $ (document.body) .prop ('scrollHeight') - tại thời điểm đó, bạn cũng có thể chỉ sử dụng document.body.scrollHeight;
goddogsrunning, 10/09/13

6
document.getElementById("elementID").scrollHeight

$("elementID").scrollHeight

vậy Id phần tử của đối tượng tài liệu của bạn là gì? ... có lẽ ý bạn là "document.body.scrollHeight"?
BrainSlugs83

2
$ ('# gallery'). scrollHeight cung cấp cho tôi không xác định // # gallery là id của phần tử tràn: tự động của tôi, không hoạt động
Anmol Saraf

6

Nó sử dụng Phần tử DOM HTML, nhưng không sử dụng bộ chọn jQuery. Nó có thể được sử dụng như:

var height = document.body.scrollHeight;

3

Một cái gì đó như thế này sẽ giải quyết vấn đề của bạn:

$.getDocHeight = function(){
     var D = document;
     return Math.max(Math.max(D.body.scrollHeight,    D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight, D.documentElement.clientHeight));
};

alert( $.getDocHeight() );

Ps: Hãy gọi chức năng đó mỗi khi bạn cần, cảnh báo dành cho mục đích kiểm tra ..


Vì lý do nào đó, chức năng này không hoạt động chính xác đối với tôi; sử dụng nó bên trong iframe. Chiều cao thực tế của <html> là 256px, hàm này cho tôi 337px và tôi không biết nó đến từ đâu. Tái
bút

@jurchiks: Bạn có liên kết đến khung nội tuyến đó ở đâu không, cho tôi xem với?
Zuul

blade.dateks.lv/salidzinat?ids=58664,43586 . Nhấp vào bất kỳ dấu hỏi nào. Tôi đã cố gắng sửa chữa hầu hết nó nhưng hai trong số đó (và còn nhiều thứ khác tùy thuộc vào các mục được so sánh) vẫn có một số lề ~ 20px kỳ lạ, bí ẩn ở dưới cùng. Tuy nhiên, nó sẽ biến mất khi tôi thay đổi kích thước cửa sổ, vì tôi đã thực hiện thay đổi kích thước cửa sổ bật lên khi thay đổi kích thước cửa sổ.
jurchiks

3

Để có được chiều cao có thể cuộn thực tế của các vùng được cuộn bởi thanh cuộn cửa sổ, tôi đã sử dụng $('body').prop('scrollHeight'). Đây có vẻ là giải pháp làm việc đơn giản nhất, nhưng tôi đã không kiểm tra rộng rãi về khả năng tương thích. Emanuele Del Grande lưu ý về một giải pháp khác rằng điều này có thể sẽ không hoạt động đối với IE dưới 8.

Hầu hết các giải pháp khác hoạt động tốt đối với các phần tử có thể cuộn, nhưng điều này hoạt động cho toàn bộ cửa sổ. Đáng chú ý, tôi đã gặp vấn đề tương tự như Michael cho giải pháp của Ankit, cụ thể là, nó $(document).prop('scrollHeight')đang quay trở lại undefined.


1

Thử đi:

var scrollHeight = $(scrollable)[0] == document ? document.body.scrollHeight : $(scrollable)[0].scrollHeight;

0

Bạn có thể thử điều này, ví dụ: mã này đặt thanh cuộn ở dưới cùng cho tất cả các thẻ DIV

Hãy nhớ rằng: jQuery có thể chấp nhận một hàm thay vì giá trị dưới dạng đối số. "this" là đối tượng được xử lý bởi jQuery, hàm trả về thuộc tính scrollHeight của DIV hiện tại "this" và thực hiện nó cho tất cả DIV trong tài liệu.

$("div").scrollTop(function(){return this.scrollHeight})
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.