2012-03-06 30 views
2

我有以下代码:如何使用jquery-ui的toggleClass更好地实现动画效果?

http://jsfiddle.net/zmhRK/

的问题是非常图形化的,所以我不认为我可以解释它比任何实际显示它在行动上的jsfiddle更好。问题是,当你按[切换],然后你可以看到列表项正在扩展,在这个过渡效果中,你所看到的只是父母的背景颜色,这相当难看。所以,我想要的是列表项的内容在动画期间可见,而不是在动画之后才可见。

我知道这是可能的,如果我例如管理设置样式属性显示:在过渡元素块,但然后我需要某种回调函数来删除显示:块一旦过渡是完成。 Afaik,这个回调函数不存在。

任何想法如何我可以解决这个问题?

+0

为什么不'''slideDown()'而不是'toggleClass()'? – elclanrs 2012-03-06 23:16:12

+0

因为子元素中的宽度更改无法通过slideDown进行缓解。正如Jaspers解决方案所观察到的那样 – netbrain 2012-03-07 00:03:10

回答

3

您可以使用.slideToggle()创建动画:

$(document).ready(function(){ 
    $('.sidebar-menu-item-controls').append('[toggle]').click(function(){ 

     //select the parent of this element, then select the next sibling, 
     //which is the UL associated with this click event 
     $(this).parent().next().slideToggle(300); 
    }); 
});​ 

这里是一个演示:http://jsfiddle.net/jasper/zmhRK/8/

注意,这也适用于您的嵌套的UL。

+0

如果您单击Channels列表项上的切换,则可以看到宽度捕捉而不是缓动。任何解决这个问题的方法? – netbrain 2012-03-07 00:02:17

+0

@netbrain如果您对元素的宽度设置得太宽,并且在其容器上设置了“overflow-x:hidden”,则应该剪裁内容而不是更改容器的大小。我试图添加一个CSS转换,但无法让它动画改变宽度... – Jasper 2012-03-07 00:20:53

+0

不幸的是剪裁内容不是一个选项。 – netbrain 2012-03-07 00:30:00

相关问题