Sử dụng Javascript hoặc jQuery đơn giản, tôi cần có chiều cao đầy đủ của một phần tử cuộn. Nhưng thuộc tính DOM scrollHeight
is apparently not 100% reliable.Trả lại giá trị của phần tử scrollHeight một cách đáng tin cậy mà không sử dụng thuộc tính `scrollHeight`
Tôi đã hình dung tạm thời đưa ra các mục một chiều cao css của auto
, kiểm tra ra kích thước của nó, sau đó trả lại css với giá trị trước của nó (mà bản thân có vấn đề - làm thế nào để tôi nhận được css height:100%
thay vì height:1012px
như jQuery .css('height')
sẽ trở lại). Nhưng sau đó tôi đã tìm ra rằng do cách jQuery áp dụng phong cách css trực tiếp đến một yếu tố, chỉ cần áp dụng phong cách ''
lợi nhuận nó để giá trị phong cách-tờ-tuyên bố bình thường của nó, vì vậy về mặt lý thuyết tôi có thể làm điều này:
$el.css('height', 'auto');
scrollHeight = $el.height();
$el.css('height', '');
Nhưng điều này không hiệu quả. height:auto
không ghi đè kiểu gốc của nguyên tố của tôi là 100%
và làm cho phần tử chiếm toàn bộ chiều cao mong muốn của nó.
Vì vậy, bây giờ tôi đang suy nghĩ một cái gì đó nhiều hơn dọc theo những dòng này: sử dụng vị trí của phần tử đầu tiên của phần tử con đầu tiên và vị trí của phần tử con cuối cùng để có được chiều cao. (Tôi có thể điều chỉnh cho padding và margin nếu cần thiết, đây chỉ là một bằng chứng của khái niệm.)
function scrollHeight($el) {
var lastEl = $el.children(':last');
return (
lastEl.position().top
+ lastEl.height()
- $el.children(':first').position().top;
);
}
Một số lao động trong các Math.max($el[0].scrollHeight, $el.height())
cũng có thể hữu ích ...
Có phải đó là một ý tưởng khủng khiếp? Tôi không thể là người duy nhất cần biết scrollHeight
của một phần tử DOM và nó có độ tin cậy, không thay đổi khi mục được cuộn và làm việc trong tất cả các trình duyệt chính cũng như IE 8 (mặc dù nó sẽ là thú vị khi biết một giải pháp cho IE 6 & 7).
IE 6 và 7? thậm chí Google (có, ngay cả trên trang bắt đầu trắng :)) đã giảm hỗ trợ cho hai fellas đó –
Bạn có thể cung cấp một jsfiddle tái tạo vấn đề của bạn không? –
@ RokoC.Buljan Đó là một điểm khá tốt. Công ty của riêng tôi chỉ rời IE7 trong năm qua ... vì vậy đó là lý do tại sao tôi nghĩ tôi muốn biết làm thế nào để hỗ trợ nó, ngay cả khi nó trở nên khan hiếm trong tự nhiên. Nhưng tôi sẽ cập nhật câu hỏi để phản ánh điều này. – ErikE