[关闭]
@brizer 2016-02-16T17:37:25.000000Z 字数 983 阅读 1255

CSS动画回调


前言

传递的javascript式动画,可以很容易地通过回调函数来实现动画完成后做什么,而css3动画则不好通过javascript来回调。如何解决这个问题呢?


css动画

css动画我以前在文章中提到过。这里写几个基本用法,第一种是简单的变换,使用transform即可:

  1. .mydiv {
  2. width:100px;
  3. height:100px;
  4. background:red;
  5. -webkit-transition: all 2s;
  6. }
  7. .newClass {
  8. -webkit-transform: translateY(100px)
  9. }

第二种是复杂一点,需要自己定义帧的状态:

  1. @-webkit-keyframes mymove {
  2. from {top:0px;}
  3. to {top:200px;}
  4. }
  5. .mydiv {
  6. width:100px;
  7. height:100px;
  8. background:red;
  9. position:relative;
  10. -webkit-animation:mymove 2s forwards; /* Safari and Chrome */
  11. }

如何回调css动画

回到一开始提出的问题,我们如何回调。
一种最基本的想法就是我们知道了动画的时间,那么可以通过延时来模拟回调:

  1. //css中代码可以看到动画持续2s
  2. var delay = 2000;
  3. setTimeout(function(){
  4. dosomething()
  5. }, delay);

但是只要深入理解一点就知道setTimeout并不可靠,而且这么写可拓展性也太差了。

那么解决办法就是通过新的事件transitionEnd和animationend:

  1. document.getElementById('my').addEventListener('transitionEnd', function(){
  2. alert('Transform animation has done!');
  3. });
  4. document.getElementById('my').addEventListener('animationend', function(){
  5. alert('Animation has done!....');
  6. });

这样就简单了。当然还有animationstart,animationiteration等事件,这里就不一一介绍了。


参考

css3动画

css动画的回调

AnimationEvent

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注