使用jQuery在悬停时将div宽度从50%更改为70%

时间:2011-11-03 23:17:19

标签: jquery html width jquery-animate

我有两个div,每个div的宽度为50%。我想做到这一点,以便悬停的div扩大到70%,另一个减少到30%。当鼠标移出时,它们各自返回50%。我写了一个脚本,但它没有给出正确的结果。宽度是流动的,因此需要调整到所有窗口大小。我该如何才能正常工作?

我没有编写mouseout功能,因为鼠标悬停功能无法正常工作。

现在它是如何运作的: http://jsfiddle.net/kYZyp/

这是我的代码:

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

这是我的css for the div's

.content_left {
    width:50%;
    top:0px;
    left:0px;
    bottom:0px;
    background:url(wedding.jpg) left center no-repeat;
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
    filter: alpha(opacity=90);
    -moz-opacity:0.9;
    -khtml-opacity: 0.9;
    opacity: 0.9;
}

.content_right {
    width:50%;
    top:0px;
    right:0px;
    bottom:0px;
    background:url(events.jpg) right center no-repeat;
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
    filter: alpha(opacity=90);
    -moz-opacity:0.9;
    -khtml-opacity: 0.9;
    opacity: 0.9;
}

我正在使用这个脚本:

<script>
$("#left").mouseover(function(){
  $("#left").animate({
    width: "70%",
    opacity: 1
  }, 1500 );
  $("#right").animate({
    width: "30%"
  }, 1500 );
});

$("#right").mouseover(function(){
  $("#right").animate({
    width: "70%",
    opacity: 1
  }, 1500 );
  $("#left").animate({
    width: "30%"
  }, 1500 );
});

</script>

包括这个jQuery文件:

<script src="http://code.jquery.com/jquery-1.7rc2.js"></script>

3 个答案:

答案 0 :(得分:7)

不知道这是否适合您: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>

我使用包装器确保我们永远不会破坏下一行。

CSS:

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

我在#wrapper

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

width:100%;

#left, #right我们使用:

display:inline-block;

女巫首先与&gt; IE6兼容。 (希望这不是问题)。

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 );
    });
});

首先,我在mouseovermouseout上绑定相同的#right#left事件

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

...

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

我们将事件触发的元素抛出并找到它的所有父元素(#wrapper)childNodes:$(this).parent().children()现在我们使用jQuery的this方法过滤掉与not匹配的所有内容。 (this = #left#right)女巫是元素。现在我们有#right -> #left#left -> #right

mouseOutHandler将所有#wrapper个子节点的宽度重置为50%

希望这能以正确的方式引导你......

修改

如果您的动画即将到期/链接使用,可以使用stop方法停止所有活动动画并清除队列:

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

答案 1 :(得分:2)

这应该很适合你:

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

编辑:添加动画
编辑:为动画添加了高度调整大小

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

编辑:如果您希望它填充窗口的高度,只需使用window.innerHeight代替容器高度:

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

这是一个jsFiddle,证明它有效。

答案 2 :(得分:0)

要获取@James' answer(+1)并添加动画,只需使用.animate()

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

演示:http://jsfiddle.net/mattball/sAW2c/