Bối cảnh:
tôi đã cố gắng để giải quyết câu hỏi StackOverflow yet another HTML/CSS layout challenge - full height sidebar with sticky footer tự mình sử dụng jQuery. Bởi vì thanh bên trong trường hợp của tôi có thể dài hơn nội dung chính phù hợp với trường hợp của comment 8128008. Điều đó làm cho nó không thể có một thanh bên dài hơn nội dung chính và có chân trang dính mà không gặp vấn đề gì khi thu hẹp cửa sổ trình duyệt.Sử dụng Javascript để thay đổi kích thước một div để sàng lọc chiều cao gây nhấp nháy khi thu hẹp cửa sổ trình duyệt
Hiện trạng:
Tôi có một trang html với một div
, mà được tự động kéo dài để lấp đầy màn hình. Vì vậy, nếu có khoảng trống bên dưới phần tử, tôi căng nó xuống:
Nhưng nếu khung nhìn trình duyệt nhỏ hơn div
bản thân, không bị kéo giãn được thực hiện nhưng các thanh cuộn xuất hiện:
Tôi đã đính kèm jQuery vào sự kiện thay đổi kích thước của cửa sổ để đổi kích thước div
, nếu cửa sổ trình duyệt không nhỏ và xóa mọi kích thước trong trường hợp khác. Điều này được thực hiện bằng cách kiểm tra xem chế độ xem có cao hơn hoặc nhỏ hơn document
hay không. Nếu chế độ xem nhỏ hơn document
, có vẻ như nội dung lớn hơn cửa sổ trình duyệt, tại sao không thay đổi kích thước; trong trường hợp khác, chúng tôi thay đổi kích thước div
để điền vào trang.
if ($(document).height() > $(window).height()) {
// Scrolling needed, page content extends browser window
// --> No need to resize the div
// --> Custom height is removed
// [...]
} else {
// Window is larger than the page content
// --> Div is resized using jQuery:
$('#div').height($(window).height());
}
Vấn đề:
Cho đến nay, tất cả mọi thứ chạy tốt. Nhưng nếu tôi thu nhỏ cửa sổ trình duyệt, có trường hợp, trong đó div
nên được thay đổi kích thước nhưng document
lớn hơn chiều cao của window
, tại sao tập lệnh của tôi giả định rằng không cần thay đổi kích thước và thay đổi kích thước của div
.
Điểm thực sự là nếu tôi kiểm tra chiều cao của document
bằng Firebug sau khi lỗi xuất hiện, chiều cao chỉ có giá trị được cho là có. Vì vậy, tôi nghĩ rằng, chiều cao của document
được thiết lập với một chút chậm trễ. Tôi đã cố gắng chạy mã thay đổi kích thước chậm một chút nhưng nó không giúp đỡ.
Tôi đã thiết lập một cuộc biểu tình trên jsFiddle. Chỉ cần thu nhỏ cửa sổ trình duyệt từ từ và bạn sẽ thấy "nhấp nháy" div
. Ngoài ra, bạn có thể xem đầu ra console.log()
và bạn sẽ nhận thấy, trong trường hợp "nhấp nháy" chiều cao của document
và chiều cao của window
khác nhau thay vì bằng nhau.
Tôi đã nhận thấy hành vi này trong Firefox 7, IE 9, Chrome 10 và Safari 5.1. Bạn có thể xác nhận nó?
Bạn có biết liệu có khắc phục không? Hoặc là cách tiếp cận hoàn toàn sai? Làm ơn giúp tôi.
Câu hỏi được định dạng rất tốt. +1 – Akos
Một chút ngoài chủ đề, nhưng bạn đang chuyển 'jQuery' làm đối số cho hàm tự gọi của bạn, trong khi hàm đó không chấp nhận bất kỳ đối số nào. – pimvdb
Tôi chơi xung quanh một chút, điều này có gần với những gì bạn muốn không? http://jsfiddle.net/2yKgQ/25/ – Esailija