ToggleClass动画jQuery?

Lia*_*iam 37 javascript jquery html5

我在我的网站上有一个部分,当用户点击我希望它扩展时,我正在使用jQuery toggleClass这个...

expandable: function(e) {
    e.preventDefault();
    $(this).closest('article').toggleClass('expanded', 1000);
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,只是我想以某种方式动画它.在Chrome中,我的文章慢慢增长到新的大小,只有在Firefox中它"立即"调整自身没有动画,有没有办法让这个动画?

gdo*_*ica 59

jQuery UI扩展了jQuery native toggleClass以获取第二个可选参数:duration

toggleClass( class, [duration] )
Run Code Online (Sandbox Code Playgroud)

Docs + DEMO

  • 要使用带有jQuery UI的动画toggleClass,您必须加载`Core`和`Effect Core`.请参阅http://jqueryui.com/download/#!themeParams=none&components=1000000000000000000010000000000000 (3认同)

the*_*dox 22

.toggleClass()不会动画,你应该去slideToggle().animate()方法.


Dar*_*rno 14

您可以简单地使用CSS过渡,看到这个小提琴

.on {
color:#fff;
transition:all 1s;
}

.off{
color:#000;
transition:all 1s;
}
Run Code Online (Sandbox Code Playgroud)

  • 最好的解决方案。CSS 动画和过渡可以取代(现在)大量不必要的 JavaScript 函数和操作,并使代码变得更轻。不错的达里奥 (2认同)

小智 7

我尝试使用toggleClass方法隐藏我的网站上的项目(使用visibility:hidden而不是display:none),带有轻微的动画,但由于某种原因,动画不起作用(可能是由于旧版本的jQuery UI ).

该类被删除并正确添加,但我添加的持续时间似乎没有任何区别 - 只是添加或删除项目没有任何效果.

所以为了解决这个问题,我在我的toggle方法中使用了第二个类,并应用了CSS转换:

CSS:

.hidden{
    visibility:hidden;
    opacity: 0;
    -moz-transition: opacity 1s, visibility 1.3s;
    -webkit-transition: opacity 1s, visibility 1.3s;
    -o-transition: opacity 1s, visibility 1.3s;
    transition: opacity 1s, visibility 1.3s;
}
.shown{
    visibility:visible;
    opacity: 1;
    -moz-transition: opacity 1s, visibility 1.3s;
    -webkit-transition: opacity 1s, visibility 1.3s;
    -o-transition: opacity 1s, visibility 1.3s;
    transition: opacity 1s, visibility 1.3s;
}
Run Code Online (Sandbox Code Playgroud)

JS:

    function showOrHide() {
        $('#element').toggleClass("hidden shown");
    }
Run Code Online (Sandbox Code Playgroud)

感谢@ tomas.satinsky在这篇文章中提供了很棒的(并且超级简单)答案.


Bro*_*omb 5

您应该查看jQuery上的toggle函数。这将允许您指定一种缓动方法来定义切换的工作方式。

slideToggle 只会上下滑动,如果您正在寻找的话,则不会左右滑动。

如果您还需要切换类,则可以在toggle函数中使用以下命令定义它:

$(this).closest('article').toggle('slow', function() {
    $(this).toggleClass('expanded');
});
Run Code Online (Sandbox Code Playgroud)

  • 作为旁注(因为我最初没有注意到这一点),. toggle()允许您为DOM中元素的隐藏或显示设置动画。起初我以为它会动画化类状态之间的过渡,但事实并非如此。 (2认同)