我可以在构建元素时暂时关闭所有 CSS3 过渡/动画吗?

Posted

技术标签:

【中文标题】我可以在构建元素时暂时关闭所有 CSS3 过渡/动画吗?【英文标题】:Can I temporarily turn off all CSS3 transitions/animations whilst an element is built? 【发布时间】:2012-01-08 19:52:44 【问题描述】:

我为网站创建了一个相当复杂的菜单。菜单来自大量基于 CSS3 的动画。但是,当我导航到不同的页面时,菜单应该最初构建 - 并且没有所有动画,而是以 JS 方式完成而不是服务器端。

现在我想知道如何暂时完全禁用所有过渡/动画,直到菜单建立。

我想过创建一个覆盖动画的子类,但它似乎不起作用,因为它总是在使用基类中定义的动画/过渡?

【问题讨论】:

潜在相关:***.com/questions/11131875/… 【参考方案1】:

我建议通过在构建菜单后由 javascript 添加的类来应用您的动画/过渡。

animation-play-state 属性可以暂停动画,但它只出现在 Safari 5 和 Chrome 4 中(与 Safari 4 和 Chrome 2 中的其他动画属性相反),我不确定如果它适合您的目的。

【讨论】:

我有这种感觉,你是绝对正确的。在我写这 2500 行之前,我没有想到这一点,我感到难以置信的喜悦。不过,我仍然梦想有一个更简单的解决方案。 我知道你的意思。不确定是否更容易——您可以在菜单开始构建时通过 JavaScript 删除有问题的类,并在完成后重新添加它。 (虽然如果类中除了动画还有其他样式,你也会失去这些。) 是的,这就是重点。这很复杂。对我来说通常是个谜,是为什么不能用新类设置过渡/动画,从而能够覆盖之前定义的类。如果可能的话,例如,“淡入淡出”过渡的时间可能与相应的“出现”过渡不同(从不透明度 0-1 和反向设置时) 哦 - 我在答案中添加了 -webkit-animation-play-state 的提及 - 我以前以为我有过,虽然我不确定它会帮助你的情况。 对于过渡,我认为其目的是让它们的实现非常简单,但牺牲了灵活性。对于动画,我认为您可以将-webkit-animation-name 属性设置为none 以禁用动画。【参考方案2】:

您可以在构建菜单时将transition-duration 设置为0s,然后再将其设置回所需的值。

【讨论】:

以上是关于我可以在构建元素时暂时关闭所有 CSS3 过渡/动画吗?的主要内容,如果未能解决你的问题,请参考以下文章

Vue封装的过渡与动画

vuebase-5.过渡和动画

CSS3 过渡延迟,进出不同时间

悬停时不透明度的 CSS3 过渡不起作用

使用css3显示/隐藏元素的css过渡效果[重复]

认识CSS3特性之过渡