views:

4031

answers:

3

I'm trying to resize a div on pageload and window resize. The code bellow is placed before </body>, and it works fine on pageload, but does nothing on window resize. I tested the resize function with an alert, which triggers on resize, but the height remains unchanged.

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


update: after a long break, I've discovered what is causing the problem. I'm using a jquery script to add a styled scrollbar on the same div that is being resized. When I comment it out, everything resizes fine. I've moved the scrollbar initialization in the same function as resize, and tried any variations I can think of.. still can't get it to work.

(the #main-content div also has .scroll-pane class)

<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>
+2  A: 

Note that the window resize function only fires once, after the window has been resized. It does not update during the resize operation, so if you are dragging the window border to test this, no changes will happen before you let go of the mouse button.

Also, make sure you do this within $(document).ready(), like this:

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

Here is a working demo.

Vegard Larsen
thanks for clarifying the subject, but I still haven't solved the problem..when I use your code, size adjustment doesn't work on load or on resize. I have no idea why, since your example works perfectly!if you've got any ideas as what may be interfering, please reply..
lemon
@lemon, are you testing this in IE? I've had problems resizing divs with the CSS height method in IE - I *think* the solution is to define a default height for the div.
Arms
The window resize event fires at different intervals depending on the browser. For (at least older versions of, in my experience) IE, it fires for every possible resize action (and then some), for Firefox it throttles events based on available resources, and for Safari it fires them consistently at regular intervals approximately 100-200ms, depending on action (it's similar to Firefox's model, but fires much less frequently).
eyelidlessness
+4  A: 

solved it!

all it needed was removing jScrollPane before calculating the height, and re-applying it.

<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>
lemon
A: 

Thanks a bundle. Works wonders, aside clunky css and homebrew js solutions.

Micke