使用CSS动画 - setTimeout的不适变化,打破动画
这里是我的目标描述:使用CSS动画 - setTimeout的不适变化,打破动画
- 我有框
display: none
- 在某个时刻,我需要
opacity
动画来显示它。
这里我的解决办法:
1. transition: opacity 0.5s ease-in-out;
2.在第一个步骤设置display: block; opacity: 0
3.在设置display: block; opacity: 1
第二步,做在setTimeout()
申请的第一步。
问题是,第一步只适用于某些情况 - 有时它有效/有时不适用,浏览器只是跳过第一步。我想改变setTimeout
到应该可以解决问题,但它不会 - check my example
为什么setTimeout
/不会强制浏览器应用的第一步?如何强制浏览器在应用第二步之前应用第一步?
解决方案:http://jsfiddle.net/sxny7zs2/
.box{display:none}
应该.box{display: block;}
当您设置display:none
你从DOM删除对象几乎完全。通过重置为display:block
,可以完全恢复对象并开始与其他对象交互。 display
功能不是用于动画,而是用于消除物体干扰他人。
我怀疑这是小人:
$box.removeClass('is-animate-enter').addClass('is-animate-active');
通过消除is-animate-enter
类,你触发display:none;
你可以添加你的下一个课前。这意味着对象从视图中卸载。同时当你做is-animate-active
你立即设置display:block
和opacity:1
。就浏览器而言,您正在创建一个新元素,而不是在此修改旧元素。如前所述,当切换display
时,您实际上是loading
和unloading
一个对象,因此没有动画是可能的。
也许.switchClass()
可以解决这个问题,但我不知道,重申display
命令是loading
和unloading
而不是动画。
它必须在开始时隐藏+我通过'.box.is-animate-enter'设置'display:block'。我的问题:为什么'setTimeout'只工作somites /原因是什么/如何使它稳定? – 2015-03-31 00:04:46
我不明白你的意思是'有时候有效'。我看到的行为是不变的,有或没有分配“显示”。唯一的区别是它使用'display:block;'来动画,而使用'display:none'则只会闪烁。我将用可能的解释编辑我的解决方案。 – 2015-03-31 00:15:52
如果你使用它,你会看到有时它工作。我用setTimeout而不是requestAnimationFrame更新了一个例子。在我的电脑上,它在大多数情况下在Chrome中运行,并且在FF中不起作用 – 2015-03-31 13:26:27