0

我有一个 div,其中包含一些隐藏的元素和一些可见的元素。

现在,当我显示隐藏元素之一(或隐藏可见元素)时,包装 div 的高度会发生变化。我还可以向 div 添加新元素。

例子:

<div class="wrapper">
    <div id="inner1">Hallo1</div>
    <div id="inner2">Hallo2</div>
    <div id="inner3">Hallo3</div>
</div>

现在我想动画包装div的高度变化。

我玩了 jquery 效果和 css3 转换,但我可以让它工作..

编辑:这里有一个小提琴作为我所拥有的示例:

http://jsfiddle.net/6rhqX/2/

现在我想在新元素出现时“平滑”包装器。

编辑:也许我过于简单化了我的问题而忘记提及一些事情..

我不想为内部 div 设置动画,我想在包装器中的某些内容被删除/添加/隐藏/显示时“自动”设置动画。

例如,我希望能够将 div 的全部内容与其他内容“交换”,并希望对新高度的更改进行动画处理...

4

3 回答 3

1

我在这里用一个简单的演示制作了一个 jsFiddle。它利用了jQuery 的slideUp() 和slideDown() 函数。按下链接将显示/隐藏 div 并适当地移动滑动包装 div,或者您可以添加附加和向下滑动的元素以及包装 div。

我在演示中使用的 HTML 标记:

<ul class="buttons">
   <li><a href="#first_box">First box</a></li>
   <li><a href="#second_box">Second box</a></li>
   <li><a href="#third_box">Third box</a></li>
</ul>
<a href="#" id="add_element">Add Element</a>
<div id="wrapper">
   <div id="first_box">
      Got some cool content here.
   </div>
   <div id="second_box">
      Also some cool content.
   </div>
   <div id="third_box">
      And a third box.
   </div>
</div>

CSS:

#wrapper {background-color: black;}

#first_box {width: 400px; height: 300px; background-color: green;}

#second_box {width: 400px; height: 300px; background-color: red; display: none;}

#third_box {width: 400px; height: 300px; background-color: blue; display: none;}

.new_element {宽度:400px; 高度:200px;背景颜色:橙色;显示:无;}

查询:

$(document).ready(function() {

  $('.buttons a').click(function(e) {
    e.preventDefault();
    var target_box = $(this).attr('href'); // get the target box id
    //check if box is currently visible or hidden
    if($(target_box).is(':hidden')) {
       //if div is hidden slide it down (show it) and wrapper slides down with it
       $(target_box).slideDown(1000);     
    } else {
       //if div is visible hide it by sliding it up, wrapper slides up with it
        $(target_box).slideUp(1000);
    }
  });    

  $('#add_element').click(function(e) {
    var new_div = $('<div class="new_element">New element</div>');
    $('#wrapper').append(new_div);

  });

});

希望能帮助到你。

于 2012-11-03T17:53:02.870 回答
1

关于您编辑的问题。您想在哪里插入内容或完全更改内容,我做了一个新的小提琴

在这个演示中,您有一个按钮,当您单击它时,它会向包装器 div 添加另外两个 Lorem Ipsum 段落。它的方式是首先将 div 动画到适当的高度,然后添加内容。您可以多次单击该按钮,每次它都会添加一个新的演示内容块。

HTML 标记:(您应该注意的是,我使用了一个临时容器来存放可见性设置为隐藏的内容。)

<a href="#" id="change_content">Add content</a>
<div id="wrapper">
    <div class="content_box">
        <p>"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do ei 
        tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
        consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
        cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
        proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p>
    </div>
</div>
<div id="temp_content"></div><!-- Container for temporary content -->

CSS(只是在这里使用 bg 颜色使动画可见,并且 visibility: hidden 用于临时容器。请注意,您不能使用 display: none 因为在测量高度时会得到 0)

#wrapper {background-color: orange;}

.content_box {width: 400px; background-color: green;}

#temp_content {width: 400px; visibility: hidden;}

jQuery(我在这里注释了代码)

$(document).ready(function() {

$('#change_content').click(function(e) {
    /*Some demo content here. Two new paragraphs wrapped in the div with content_box
      class. If it wasn't wrapped in the content_box class. In order to get correct
      height you should have temporary container width same as desired target
      container width so the content fills up properly.*/
    var new_content = '<div class="content_box"><p>Lorem ipsum dolor sit amet, 
    consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
    magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris 
    nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
    voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
    occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
    est laborum.Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do 
    eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim 
    veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo  
    consequat.
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
    fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in 
    culpa qui officia deserunt mollit anim id est laborum.</p></div>';

    //insert the new content inside the temporary container.
    $('#temp_content').html(new_content);
    //calculate the temporary container height
    var new_content_height = $('#temp_content').height();
    //calculate current content height
    var existing_content_height = $('#wrapper').height();  
    //add two heights together
    var target_height = new_content_height + existing_content_height + 'px';        
     $('#wrapper').animate({
        height: target_height
      }, 1000, function() {
        //after the animation is over insert the content to the wrapper
        $('#wrapper').append(new_content);
        //its not obligatory but lets empty the temporary container
        $('#temp_content').empty();
      });    
});
});

希望能帮助到你。

编辑:有错误的小提琴链接。现在它指向正确。

于 2012-11-03T19:01:33.883 回答
0

jQuery 有一个方便的函数,叫做slideDown你想要的动画。

这会找到第一个隐藏的div并将其动画化:http: //jsfiddle.net/6rhqX/4/

于 2012-11-03T17:52:44.630 回答