关于如何解决与jQuery addClass()
+ removeClass()
和CSS3动画/过渡相关的具体问题,SO上有很多问题。
一般来说,我关心的是做以下事情的最佳方法:
- 旧浏览器的优雅降级(不触发例如
animationend
事件) - 检测转换是否已经在运行
- 停止或重新启动运行转换
- 转换过程中改变参数
具体来说,我有一些我正在使用的动画类,可以在必要的jsFiddle示例中检查。
在本文中,我使用opacity
和max-height
定义了提供"出现"one_answers"消失"动画的类。当小提琴启动时,你可以看到两个都在运行。
然后,我想让元素在触发某些事件时出现/消失。我正在尝试使用addClass()
&removeClass()
(甚至jQuery UI的switchClass()
)在这里的另一篇文章的建议。正如你所看到的那样(通过点击"点击动画"one_answers"点击重置"),它们的行为并不像人们想象的那样。
注:我知道Web动画API,但它现在只是一个草案。jQuery和jQuery UI有animate()
,但如果可能的话,我宁愿使用标准的CSS。
将代码改为
$("#toggle").click(function(){
var $one = $('#one');
var $two = $('#two');
var $three = $('#three');
$one.removeClass('appear-lg');
$one[0].offsetWidth = $one[0].offsetWidth;
$one.addClass("disappear-lg");
$two.removeClass('disappear-lg');
$two[0].offsetWidth = $two[0].offsetWidth;
$two.addClass("appear-lg");
$three.removeClass('appear-lg');
$three[0].offsetWidth = $three[0].offsetWidth;
$three.addClass("disappear-lg");
});
注意在更改类之间offsetWidth
的变化。这有效地具有刷新动画的效果。