如何在手风琴菜单上制作动画?

时间:2012-10-09 20:44:13

标签: jquery jquery-animate accordion jquery-ui-accordion

当我删除手风琴的一部分时,我正试图让动画工作。而不仅仅是消失,我希望它做一些超级酷酷的事情。如何让动画在这个实例中工作?谢谢一堆。这是我的JS:

$('document').ready(function(){
  $('#accordion .red').click(function(){

    $(this).parent('div').prev( 'h3' ).remove();
    $(this).parent('div').remove();
    $(this).parent('div').prev('div').animate("bounceslide");

    return false;
  });
});

这是我的HTML:

<div id="accordion">

    <h3><a href="#">Section 1</a></h3>
    <div class="squares">
            <a href="#" class="green">1</a>
            <a href="# "class="red">2</a>
            <a href="#" class="blue">3</a>  
            <p>
            Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
            ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
            amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
            odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
            </p>
    </div>

    <h3><a href="#">Section 1</a></h3>
    <div class="squares">
            <a href="#" class="green">1</a>
            <a href="# "class="red">2</a>
            <a href="#" class="blue">3</a>  
            <p>
            Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
            ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
            amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
            odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
            </p>
    </div>
</div>

1 个答案:

答案 0 :(得分:2)

你的逻辑中有一点瑕疵,因为它目前正在...... 你打电话:

$(this).parent('div').remove();

然后:

$(this).parent('div').prev('div').animate("bounceslide");

由于DOM中不再存在$(this)(它已与其'父级一起删除),因此上述选择器将无效。

我建议使用动画回调来删除 super duper cool 之后的手风琴项目。
类似的东西:

$('#accordion .red').click(function(){
  var $toRemove = $(this).parent('div').prev('h3');
      $toRemove = $toRemove.add($(this).parent('div'));

  $toRemove.animate({height:0}, 500, function(){
    // This is the callback.
    $toRemove.remove();
  });

  return false;
});

JSfiddle:http://jsfiddle.net/L9BXS/