2009-09-18 15 views
9

Sto provando a ridimensionare un div su pageload e ridimensionare le finestre. Il codice seguente è posizionato prima dello </body> e funziona correttamente con il pageload, ma non esegue ridimensionamenti della finestra. Ho testato la funzione di ridimensionamento con un avviso, che si attiva al ridimensionamento, ma l'altezza rimane invariata.jQuery - altezza div dinamica

<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> 

aggiornamento: dopo una lunga pausa, ho scoperto che cosa sta causando il problema. Sto usando uno script jquery per aggiungere una barra di scorrimento in stile sullo stesso div che viene ridimensionato. Quando commento, tutto si ridimensiona. Ho spostato l'inizializzazione della barra di scorrimento con la stessa funzione di ridimensionamento, e ho provato qualsiasi variazione che possa pensare .. ancora non riesco a farlo funzionare.

(classe # main-content div ha anche .scroll-pane)

<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> 

risposta

14

risolto!

tutto quello che serviva era rimuovere jScrollPane prima di calcolare l'altezza e riapplicarlo.

<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

hey, stavo cercando di fare un'altezza dinamica per un div nella mia app e ho usato il tuo codice (ho appena rimosso lo stuf sul pannello di scorrimento). :) Bella soluzione. – user1080533

+0

'Uncaught TypeError: $ (...). JScrollPane non è una funzione' ... Che cosa è' jScrollPane'? Il suo plugin? – KingRider

5

Si noti che la funzione di finestra di ridimensionamento spara solo una volta, dopo che la finestra è stata ridimensionata. Non si aggiorna durante l'operazione di ridimensionamento, quindi se stai trascinando il bordo della finestra per testarlo, non si verificheranno modifiche prima di rilasciare il pulsante del mouse.

Inoltre, assicuratevi di fare questo all'interno $(document).ready(), in questo modo:

<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> 

Ecco un working demo.

+0

grazie per aver chiarito l'argomento, ma non ho ancora risolto il problema .. quando utilizzo il codice, la regolazione della dimensione non funziona sul caricamento o sul ridimensionamento. Non ho idea del perché, dal momento che il tuo esempio funziona perfettamente! se hai qualche idea che potrebbe interferire, per favore rispondi .. – lemon

+0

@lemon, stai testando questo in IE? Ho avuto problemi nel ridimensionare i div con il metodo CSS height in IE - I * think * la soluzione è definire un'altezza predefinita per il div. –

+0

L'evento di ridimensionamento della finestra si attiva a intervalli diversi a seconda del browser. Per (almeno versioni precedenti di, nella mia esperienza) IE, spara per ogni possibile azione di ridimensionamento (e poi alcuni), per Firefox limita gli eventi in base alle risorse disponibili, e per Safari li licenzia costantemente ad intervalli regolari di circa 100- 200ms, a seconda dell'azione (è simile al modello di Firefox, ma spara molto meno frequentemente). – eyelidlessness

1

Non eseguire la funzione a meno che l'altezza del documento sia inferiore o uguale all'altezza della finestra.

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

Ho riscontrato problemi in cui il contenuto sarebbe uscito dal div.