JQuery:儿童在父母大小的动画上消失了

时间:2011-03-23 20:55:55

标签: jquery css jquery-animate

在这个简化版的层次结构图中,子元素在父动画的大小设置动画时会消失。有什么方法可以阻止这种情况吗?

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"  type="text/javascript"></script>
<style type="text/css">
div 
{
    position:absolute;
    width:40px;
    height: 40px;
    background: #f00;
}
</style>
</head>
<body>
<script language="javascript">
    $(document).ready(function (e) {
        $('div').hover(function (e) {
            e.stopPropagation();
            $(e.target).animate({ width: "100px", height: "100px" }, 400).children('p').fadeIn(1000);
        }, function (e) {
            e.stopPropagation();
            $(e.target).animate({ width: "40px", height: "40px" }, 500).children('p').fadeOut(200);
        });
    });
</script>
<div style="top:50px; left:104px; ">
    <div style="top:78px; left:85px; "></div>
    <div style="top:78px; left:6px; "></div>
    <div style="top:79px; left:-74px; "></div>
    <div style="top:78px; left:171px; ">
        <div style="top:93px; left:-58px; "></div>
        <div style="top:98px; left:8px; "></div>
        <div style="top:93px; left:69px; "></div>
    </div>

</div>
</body>
</html>

2 个答案:

答案 0 :(得分:15)

根据David的回答,您可以在CSS中添加overflow: visible !important以强制子元素保持可见。

div 
{
    position:absolute;
    width:40px;
    height: 40px;
    background: #f00;
    overflow: visible !important; /* Superset jQuery#animate() 'overflow:hidden'  
}

它适用于您的示例,但您可能会在更复杂的HTML树中获得不需要的结果。

我注意到一个奇怪的效果,如果你将鼠标移到父级,然后是子级:多个元素一次缩放。也许这就是你想要的。如果没有,更好的解决方案可能是更改HTML源以将“zoomable”内容元素包装在由div组成的树结构中。

答案 1 :(得分:8)

作为animate方法的一部分,它为父元素设置overflow:hidden样式。那暂时隐藏了儿童积木。这可能是一个线索,但我不知道避免它的最佳方法是什么。