如何使用 jquery-ui 的 toggleClass 更好地制作动画?

Posted

技术标签:

【中文标题】如何使用 jquery-ui 的 toggleClass 更好地制作动画?【英文标题】:how can I animate this a bit better using jquery-ui's toggleClass? 【发布时间】:2012-03-24 11:59:36 【问题描述】:

我有以下代码:

http://jsfiddle.net/zmhRK/

这个问题非常形象化,所以我认为我不能比在 jsfiddle 上实际展示它更好地解释它。问题是当您按下 [toggle] 时,您可以看到列表项正在扩展,并且在此过渡效果中,您看到的只是父母的背景颜色,这相当难看。所以,我想要的是列表项的内容在动画期间可见,而不是仅在动画之后可见。

我知道这是可能的,例如,如果我设法在过渡中的元素上将样式属性设置为 display:block,但是一旦过渡完成,我将需要某种回调函数来删除 display:block . Afaik,这个回调函数不存在。

有什么办法可以解决这个问题吗?

【问题讨论】:

你为什么不slideDown() 而不是toggleClass() 因为子元素的宽度变化不会通过 slideDown 缓和。正如 Jaspers 解决方案所观察到的那样 【参考方案1】:

您可以使用.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。

【讨论】:

如果您单击 Channels 列表项上的切换,您可以看到宽度对齐而不是缓动。有什么办法解决这个问题? @netbrain 如果你在元素上设置了一个太宽的宽度,并且在它的容器上设置了overflow-x : hidden,它应该剪切内容而不是改变容器的大小。我尝试添加一个 CSS 过渡,但无法让它为宽度变化设置动画...... 很遗憾,无法剪辑内容。 @netbrain 如果为容器设置了定义的宽度,可以添加word-wrap : break-word,内部内容不会溢出容器,但也不会隐藏,单词会中断并重新流动到下一行:developer.mozilla.org/en/CSS/word-wrap 恐怕设置固定宽度也不是一种选择。非常好的建议顺便说一句,让他们来吧;)

以上是关于如何使用 jquery-ui 的 toggleClass 更好地制作动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jquery-ui 和 Django 创建模式登录表单

如何使用 webpack 添加 jquery-ui css/图像

如何使用 NPM 同时获得 JQuery-UI 和 datepicker 本地化?

如何将 jQuery 和 jQuery-ui 与 Parcel(捆绑器)一起使用?

Rails 6:如何通过 webpacker 添加 jquery-ui?

如何在 Rails 6 项目中包含 jquery-ui?