2009-09-18 5 views
9

Я пытаюсь изменить размер div на pageload и изменять размер окна. Код ниже расположен до </body>, и он отлично работает на pageload, но ничего не делает при изменении размера окна. Я протестировал функцию изменения размера с предупреждением, которое вызывает изменение размера, но высота остается неизменной.jQuery - динамическая высота div

<script type='text/javascript'> 
    $('#main-content') .css({'height': (($(window).height()) - 361)+'px'}); 

    $(window).resize(function(){ 
     $('#main-content') .css({'height': (($(window).height()) - 361)+'px'}); 
     alert('resized'); 
    }); 
</script> 

обновление: после долгого перерыва, я обнаружил, что является причиной проблемы. Я использую сценарий jquery, чтобы добавить стилизованную полосу прокрутки на том же div, который изменяется. Когда я прокомментирую это, все меняется отлично. Я переместил инициализацию прокрутки в той же функции, что и размер, и попробовал любые варианты, о которых я могу думать .. все еще не может заставить его работать.

(ДИВ # основного содержимого также .scroll-панели класса)

<script type='text/javascript'> 
$(function(){ 
    $('#main-content').css({'height':(($(window).height())-361)+'px'}); 
    $('.scroll-pane').jScrollPane({scrollbarWidth:15, scrollbarMargin:15}); 

    $(window).resize(function(){ 
      $('#main-content').css({'height':(($(window).height())-361)+'px'}); 
    }); 
}); 
</script> 

ответ

14

решил!

все, что нужно было удалить jScrollPane перед вычислением высоты и повторным применением.

<script type='text/javascript'> 
$(function(){ 
    $('.scroll-pane').css({'height':(($(window).height())-361)+'px'}); 
    $('#main-content').jScrollPane({scrollbarWidth:15, scrollbarMargin:15}); 

    $(window).resize(function(){ 
      $('.scroll-pane').jScrollPaneRemove(); 
      $('#main-content').css({'height':(($(window).height())-361)+'px'}); 
      $('.scroll-pane').jScrollPane({scrollbarWidth:15, scrollbarMargin:15}); 
    }); 
}); 
</script> 
+0

эй, я пытался сделать динамическую высоту для div в моем приложении, и я использовал ваш код (я просто удалил stuf из области прокрутки). :) Хорошее решение. – user1080533

+0

'Uncaught TypeError: $ (...). JScrollPane не является функцией' ... Whats 'jScrollPane'? Его плагин? – KingRider

5

Обратите внимание, что функция окна изменения размера только срабатывает один раз, после изменения размеров окна. Он не обновляется во время операции изменения размера, поэтому, если вы перетаскиваете границу окна, чтобы проверить это, никаких изменений не произойдет, прежде чем вы отпустите кнопку мыши.

Кроме того, убедитесь, что вы делаете это в $(document).ready(), как это:

<script type='text/javascript'> 
$(function() 
{ 
    $('#main-content') .css({'height': (($(window).height()) - 361)+'px'}); 

    $(window).resize(function(){ 
     $('#main-content') .css({'height': (($(window).height()) - 361)+'px'}); 
     alert('resized'); 
    }); 
}); 
</script> 

Вот working demo.

+0

пояснения к вопросу, но я до сих пор не решил проблему. Когда я использую ваш код, настройка размера не работает при загрузке или изменении размера. Я понятия не имею, почему, так как ваш пример отлично работает! Если у вас есть какие-то идеи, как то, что может мешать, ответьте ... – lemon

+0

@lemon, вы тестируете это в IE? У меня были проблемы с изменением размера div с помощью метода высоты CSS в IE - я считаю, что решение заключается в определении высоты по умолчанию для div. –

+0

Событие изменения размера окна происходит с различными интервалами в зависимости от браузера. Для (по крайней мере, более старых версий, по моему опыту) IE, он запускает все возможные действия по изменению размера (а затем и некоторые), для Firefox он активирует события на основе доступных ресурсов, а для Safari он последовательно запускает их с регулярными интервалами приблизительно 100- 200 мс, в зависимости от действия (он похож на модель Firefox, но срабатывает гораздо реже). – eyelidlessness

1

Не выполняйте функцию, если высота документа не меньше или равна высоте окна.

$(function() { 
    if($(document).height() <= $(window).height()) { 
    $('#wrapper').css({ 'height': ($(window).height()) }); 
    $(window).resize(function(){ 
     $('#wrapper').css({ 'height': ($(window).height()) }); 
    }); 
    } 
}); 

У меня были проблемы с содержимым, выходящим за пределы div.