2009-09-18 29 views
9

Estoy tratando de cambiar el tamaño de un div en la carga de la página y el tamaño de la ventana. El código siguiente se coloca antes del </body>, y funciona bien en la carga de la página, pero no hace nada en el cambio de tamaño de la ventana. Probé la función de cambio de tamaño con una alerta, que se activa al cambiar el tamaño, pero la altura permanece sin cambios.jQuery: altura div dinámica

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

actualización: después de un largo descanso, he descubierto lo que está causando el problema. Estoy usando un script jquery para agregar una barra de desplazamiento con estilo en el mismo div que se está cambiando de tamaño. Cuando lo comento, todo cambia bien. He movido la inicialización de la barra de desplazamiento en la misma función que cambiar el tamaño, e intenté cualquier variación que se me ocurra ... todavía no puedo hacer que funcione.

(clase del div # principal de contenido también tiene .scroll-panel)

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

Respuesta

14

lo resolvió!

todo lo que se necesitaba era eliminar jScrollPane antes de calcular la altura y volver a aplicarla.

<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, estaba intentando hacer una altura dinámica para un div en mi aplicación y usé tu código (acabo de eliminar el stuf sobre el panel de desplazamiento). :) Buena solución. – user1080533

+0

'UnEught TypeError: $ (...). JScrollPane no es una función' ... ¿Qué es' jScrollPane'? ¿Su complemento? – KingRider

5

Tenga en cuenta que la función de ventana de cambio de tamaño sólo se activa una vez, después de que la ventana ha sido redimensionada. No se actualiza durante la operación de cambio de tamaño, por lo que si está arrastrando el borde de la ventana para probar esto, no se producirán cambios antes de soltar el botón del mouse.

También, asegúrese de hacer esto dentro de $(document).ready(), así:

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

Aquí es una working demo.

+0

gracias por aclarar el tema, pero todavía no he resuelto el problema .. cuando uso su código, el ajuste de tamaño no funciona en carga o en el cambio de tamaño. No tengo idea de por qué, ya que tu ejemplo funciona a la perfección. si tiene alguna idea de lo que puede interferir, responda ... – lemon

+0

@lemon, ¿está probando esto en IE? He tenido problemas para cambiar el tamaño de los divs con el método de altura CSS en IE - I * think * la solución es definir una altura predeterminada para el div. –

+0

El evento de cambio de tamaño de la ventana se dispara en diferentes intervalos dependiendo del navegador. Para (al menos las versiones anteriores de, en mi experiencia) IE, se dispara para cada acción de cambio de tamaño posible (y algo más), para Firefox acelera los eventos en función de los recursos disponibles, y para Safari los dispara consistentemente a intervalos regulares de aproximadamente 100- 200 ms, dependiendo de la acción (es similar al modelo de Firefox, pero dispara con mucha menos frecuencia). – eyelidlessness

1

No ejecute la función a menos que la altura del documento sea menor o igual que la altura de la ventana.

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

Tuve problemas en los que el contenido fluiría fuera del div.

Cuestiones relacionadas