我有animate.css
的修改版本(添加了一些延迟,新时间和新位置),默认情况下设置类(html文档)时效果非常好。但是当我通过js动态添加动画类时,动画不会被执行!
更令人烦恼的是,我确实让它在某些时候工作,但我无法让它再次工作(使用gumby框架和inview js在元素在屏幕上时添加一个类(添加.animated))。左边的框已经有了html中的类,右边的框有了js添加的.animate类。
例:
http://onepageframework.com/28_2_14/strange_anim.html
为什么右框不是动画的任何想法?
使用Gumby inview扩展程序:http://gumbyframework.com/docs/extensions/#!/inview
编辑:添加了html:
<div class="six columns text-center fadeInLeftMedium delay_2 animated">
<!-- left box content here -->
</div>
<div class="six columns text-center fadeInLeftMedium delay_2 inview" data-classname="animated">
<!-- right box content here -->
</div>
的CSS:
.animated {
-webkit-animation-duration: 1s;
-moz-animation-duration: 1s;
-o-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
-moz-animation-fill-mode: both;
-o-animation-fill-mode: both;
animation-fill-mode: both;
}
.delay_2 {
-webkit-animation-delay: 2s;
-moz-animation-delay: 2s;
-o-animation-delay: 2s;
animation-delay: 2s;
}
@-webkit-keyframes fadeInLeftMedium {
0% {
opacity: 0;
-webkit-transform: translateX(-400px);
}
100% {
opacity: 1;
-webkit-transform: translateX(0);
}
}
@-moz-keyframes fadeInLeftMedium {
0% {
opacity: 0;
-moz-transform: translateX(-400px);
}
100% {
opacity: 1;
-moz-transform: translateX(0);
}
}
@-o-keyframes fadeInLeftMedium {
0% {
opacity: 0;
-o-transform: translateX(-400px);
}
100% {
opacity: 1;
-o-transform: translateX(0);
}
}
@keyframes fadeInLeftMedium {
0% {
opacity: 0;
transform: translateX(-400px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
.fadeInLeftMedium {
-webkit-animation-name: fadeInLeftMedium;
-moz-animation-name: fadeInLeftMedium;
-o-animation-name: fadeInLeftMedium;
animation-name: fadeInLeftMedium;
}
答案 0 :(得分:14)
原因与您可以通过随后删除和添加类重新触发基于CSS的动画的原因相同。原因是浏览器批量修改这些修改并优化动画。 讨论了原因和解决方案here。
从文章中,您的选择是(转述):
- 在重新添加课程之前添加一个小延迟(不推荐)
- 克隆元素,将其删除,然后插入克隆
- 有2个相同的动画(附加到不同的css规则)并在它们之间切换
- 在删除和添加类名之间触发重排:
醇>
element.classList.remove("run-animation");
// element.offsetWidth = element.offsetWidth; //doesn't work in strict mode
void element.offsetWidth; // reading the property requires a recalc
element.classList.add("run-animation");
- 将元素的CSS animation-play-state属性更改(循环)为
醇>paused
或running
(不重启动画)
答案 1 :(得分:0)
我认为你只需要将动画添加为类而不是data-classname="animated"
...
基本上是这样的:
<div class="six columns text-center fadeInLeftMedium delay_2 inview" data-classname="animated">
<!-- right box content here -->
</div>
应该是:
<div class="six columns text-center fadeInLeftMedium delay_2 inview animated">
<!-- right box content here -->
</div>
否则动画缺少指定的动画持续时间,如果没有指定animation-duration属性,动画将无效。
答案 2 :(得分:0)
通过交换类,看起来它可以工作(在类中动画,fadeInLeft Medium作为数据类名):
<div class="six columns text-center fadeInLeftMedium delay_2 animated">
<!-- left box content here -->
</div>
<div class="six columns text-center animated delay_2 inview" data-classname="fadeInLeftMedium">
<!-- right box content here -->
</div>