Skip to content Skip to sidebar Skip to footer

Using Jquery To Change Div Width From 50% To 70% On Hover

I have two divs that have 50% width each. I want to make it so that the the hovered div expands to 70% and the other reduces to 30%. And when the mouse moves out, they both return

Solution 1:

Doesn't know if this suites you: http://jsfiddle.net/yCY9y/3/

DOM:

<div id="wrapper">
    <div id="left" class="content_left">LEFT</div><div id="right" class="content_right">RIGHT</div>
</div>

I use the wrapper to be sure we never break the RIGHT to the next line.

CSS:

#wrapper {
    width:100%;
    overflow:hidden;
    white-space:nowrap;
}
#left, #right {
    display:inline-block;
    width: 50%;
}
#left {
    background:red;
}
#right {
    background:yellow;
}

I use on #wrapper

white-space:nowrap; // Newer break whitespaces (break to the next line)

and

width:100%;

On #left, #right we use:

display:inline-block;

witch is first compatible with >IE6. (hopes this is not a problem).

JS:

$("#left, #right").each(function() {
    $(this).data("standardWidth", $(this).width());
});

$("#left, #right").hover(function() {
    $(this).animate({
        width: "70%"
    }, 300 );
    $(this).parent().children().not(this).animate({
        width: "30%"
    }, 300 );
}, function() {
    $(this).parent().children().each(function() {
        $(this).animate({
            width: $(this).data("standardWidth")
        }, 300 );
    });
});

First i Bind the same mouseover and mouseout event on both #right and #left

$(selector).hover(mouseOverHandler, mouseOutHandler);

...

$(this).parent().children().not(this)

We take the element the event is fired throw and finds all it's parents (#wrapper) childNodes: $(this).parent().children() Now we filter out everything matching this using jQuery's not method. (this = #left OR #right) witch is the element. Now we have #right -> #left and #left -> #right.

The mouseOutHandler resets all of #wrapper childNodes's width to 50%

Hopes this leads you the right way...

EDIT:

If you are expiring your animation to chain / queue up use can use the stop method witch stop all active animations and clears the queue:

$(selector).stop().animate({
    ....
})

Solution 2:

This should work nicely for you:

<scripttype="text/javascript">
    $(function(){
        $("#div1").hover(
            function(){
               $(this).css("width", "70%"); 
            },
            function(){
                $(this).css("width", "50%");
            }
        );                             
    });
</script>

EDIT: Added animation EDIT: Added height resize to animation

<scripttype="text/javascript">
    $(function(){
        $("#div1").hover(
            function(){
                $(this).animate({ "width" : "70%", "height" : $("#container").height() + "px" }); 
            },
            function(){
                $(this).animate({ "width" : "50%", "height" : "" });
            }
        );                             
    });
</script><divid="container"style="height:400px;border:1px solid #000;padding:10px;"><divid="div1"style="width:50%;border:1px solid #000;min-height:100px;">
        Hello world!
    </div></div>

EDIT: If you want it to fill the height of the window, just use window.innerHeight in place of the container height:

<scripttype="text/javascript">
    $(function(){
        $("#div1").hover(
            function(){
                $(this).animate({ "width" : "70%", "height" : window.innerHeight + "px" }); 
            },
            function(){
                $(this).animate({ "width" : "50%", "height" : "" });
            }
        );                             
    });
</script><divid="div1"style="width:50%;border:1px solid #000;min-height:100px;">
    Hello world!
</div>

Here's a jsFiddle that demonstrates it working.

Solution 3:

To take @James' answer (+1) and add animation, just use .animate():

$(function(){
    $("#div1").hover(
        function(){
           $(this).animate({width: '70%'});
        },
        function(){
            $(this).animate({width: '50%'});
        }
    );                            
});

Demo: http://jsfiddle.net/mattball/sAW2c/

Post a Comment for "Using Jquery To Change Div Width From 50% To 70% On Hover"