2010-05-03 47 views
28

Tôi có một div trên trang web của tôi nên là chiều cao của cửa sổ. Đây là những gì tôi nhận được:Làm thế nào để thay đổi chiều cao div trên cửa sổ thay đổi kích cỡ?

$(document).ready(function() { 
    var bodyheight = $(document).height(); 
    $("#sidebar").height(bodyheight); 
}); 

Tuy nhiên, nó không tự động thay đổi khi cửa sổ được thay đổi kích cỡ? Có cơ thể nào biết cách sửa lỗi này không?

Cảm ơn

+1

Có bất kỳ lý do cụ thể tại sao bạn không thể đối phó với vấn đề này với CSS? JS giải pháp sẽ được tốt nhất choppy trên "một số" trình duyệt (không cần phải đặt tên con thú tôi giả sử) ... –

+0

https://jsfiddle.net/53hoq9w7/ – Pierre

Trả lời

49

Bạn cũng cần phải làm điều đó trong resize sự kiện, hãy thử này:

$(document).ready(function() { 
    $(window).resize(function() { 
     var bodyheight = $(this).height(); 
     $("#sidebar").height(bodyheight); 
    }).resize(); 
}); 
+19

Tôi nghĩ rằng thế giới sẽ là một nơi tốt hơn nếu giải pháp này là đã chỉnh sửa để các cuộc gọi 'ready' và' resize' được chia sẻ một hàm duy nhất, thay vì sử dụng mã trùng lặp. Mọi người có xu hướng sao chép-dán mã javascript khá mù quáng: tại sao không cho họ thấy cách thực hành tốt nhất? – aaaidan

+0

+1 để thay đổi kích thước sự kiện. Tôi đã có một vấn đề tương tự và điều này đã giúp đỡ một cách độc đáo. Tôi sẽ theo lời khuyên của aaaidan và ném nó vào một chức năng duy nhất. – Crackertastic

+1

Trong trình xử lý thay đổi kích thước, bạn không thể sử dụng nút '$ (tài liệu)'. Tôi muốn đề nghị sử dụng '$ (this)' selector vì điều này đang được thay đổi kích cỡ. – bioffe

1

Sử dụng các sự kiện resize.

này nên làm việc:

$(document).ready(function() { 
    $(window).resize(function() { 
    var bodyheight = $(document).height(); 
    $("#sidebar").height(bodyheight); 
}); }); 
+1

Bạn không cần trình xử lý sự kiện thay đổi kích cỡ trong $ của bạn (tài liệu) .ready –

4

Bên cạnh đó với những gì người khác đã nói chắc chắn rằng bạn trích xuất mã xử lý sự kiện vào một chức năng riêng biệt và gọi nó là từ readyresize xử lý sự kiện. Bằng cách đó, nếu bạn thêm một số mã hoặc cần phải liên kết nó với các sự kiện khác, bạn sẽ chỉ có một nơi để thay đổi mã logic.

+0

Những gì bạn cũng nên làm trong trường hợp đó là đảm bảo bạn đặt chiều cao ở đúng vị trí. Đừng phạm sai lầm tôi đã từng làm, và thiết lập chiều cao của hai div bao gồm trang của tôi, sau đó thiết lập chiều rộng của một trong các cột - thay đổi chiều cao, dẫn đến tình trạng tràn. –

5

Một số làm rõ về điều này, để cửa sổ thay đổi kích thước chính xác sau mỗi lần gọi lại, bạn phải làm rõ chiều cao cần lấy.

$(document).ready(function() { 
     $(window).resize(function() { 
      var bodyheight = $(window).height(); 
      $("#sidebar").height(bodyheight); 
     }); 
    }); 

Nếu không, từ kinh nghiệm của tôi, chiều cao sẽ tiếp tục tăng ngay bây giờ là cách bạn đổi kích thước cửa sổ. Điều này sẽ lấy chiều cao của cửa sổ hiện tại.

5

Chỉ cần để hiển thị các DRY-up gợi ý trong các bình luận về câu trả lời được chấp nhận:

$(document).ready(function() { 
    body_sizer(); 
    $(window).resize(body_sizer); 
}); 
function body_sizer() { 
    var bodyheight = $(window).height(); 
    $("#sidebar").height(bodyheight); 
} 

Và dĩ nhiên đây là loại ngớ ngẩn vì nó là một cái gì đó mà có thể được thực hiện với CSS đơn giản hơn. Nhưng nếu có một phép tính liên quan thì đó sẽ là một câu chuyện khác. Ví dụ này làm cho một div điền vào dưới cùng của cửa sổ, trừ đi một fudgefactor nhỏ.

$(function(){ 
    resize_main_pane(); 
    $(window).resize(resize_main_pane); 
}); 
function resize_main_pane() { 
    var offset = $('#main_scroller').offset(), 
    remaining_height = parseInt($(window).height() - offset.top - 50); 
    $('#main_scroller').height(remaining_height); 
} 
+1

Đảm bảo có tài liệu HTML5 trong tệp HTML. Giảm kích thước cửa sổ không hoạt động với các phương thức này trừ khi bạn thêm nó vào đầu tệp HTML: '' – Bobort

0
$(document).ready(function() 
{ 

    $(window).on("resize",function() { 

      var bodyheight = $(document).height(); 

      $("#sidebar").height(bodyheight); 
    }); 

}); 
Các vấn đề liên quan