2012-01-19 130 views
1

动画结束时,如何从html对象中更改或删除css类?我想,当动画结束时删除一个div ...如何知道css3动画何时结束

.loginAnimado 
{   
    width:100px; 
    height:100px; 
    background:#F2F2F2; 
    position:relative;    
    -webkit-animation:mymove 1s 1; /* Safari and Chrome */ 
} 

@-webkit-keyframes mymove /* Safari and Chrome */ 
{ 
    from 
    {      
    } 

    to 
    {   
     opacity: 0.0;  
     -webkit-transform: scale(2) rotate(0deg) translate(0px, 0px) skew(0deg, 0deg);    
     display:none; 
    } 
} 

回答

3

需要Javascript这一点,它使用jQuery容易...

$(document).ready(function(){ 
    $('.loginAnimado').bind("webkitAnimationEnd mozAnimationEnd msAnimationEnd oAnimationEnd animationEnd", function(){ 
    $(this).removeClass('loginAnimado'); 
    }); 
}); 
+0

谢谢!正是我需要的! –

6

的animationend事件区分大小写,并因浏览器而异。官方规格全部为小写,尽管各种浏览器前缀在实现中也有所不同。

Mozilla: mozAnimationEnd 
Webkit: webkitAnimationEnd 
Opera: oanimationend 
IE: MSAnimationEnd 
W3C: animationend 

看到这个jsfiddle为live example

+0

谢谢你的例子! –

+0

谢谢,这是一个很好的例子。奇怪的是 - 如果令人讨厌的话 - IE 11似乎只关注动画结局。 –

+0

事实上animationEnd在IE11中不能及时工作:https://connect.microsoft.com/IE/feedbackdetail/view/1605631/animation-end-events-firing-late – glenatron

1

接受的答案目前在Chrome中为动画启动两次(当自jQuery 1.7以来的首选方法现在为.on时,它也使用.bind)。大概这是因为它承认webkitAnimationEnd以及animationEnd。以下肯定只会发生一次:

/* From Modernizr */ 
function whichTransitionEvent(){ 

    var el = document.createElement('fakeelement'); 
    var transitions = { 
     'animation':'animationend', 
     'OAnimation':'oAnimationEnd', 
     'MSAnimation':'MSAnimationEnd', 
     'WebkitAnimation':'webkitAnimationEnd' 
    }; 

    for(var t in transitions){ 
     if(transitions.hasOwnProperty(t) && el.style[t] !== undefined){ 
      return transitions[t]; 
     } 
    } 
} 

$("#elementToListenTo") 
    .on(whichTransitionEvent(), 
     function(e){ 
      // What you want to do here 
      $('.loginAnimado').removeClass('loginAnimado'); 
      $(this).off(e); 
     });