当我的动画结束时,transitionend事件不会触发

时间:2013-07-24 18:40:48

标签: javascript jquery css events animation

我正在尝试使用jQuery在css动画完成时触发事件并且它在很大程度上正常工作,但出于某种原因,在我将鼠标移离对象之前,transitionend事件不会被调用问题

以下是方法:

function replaceWithSearch(){
    var searchWrapper = constructSearchBox("");
    $(this).addClass("animated fadeOut"); // css animation
    $(this).on('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend',
    function (e){
        console.log(e);
        $(this).parent().replaceWith(searchWrapper);
        if (document.URL.indexOf("search?s=") == -1){
            document.getElementById("searchbox").focus();
        }
    });
}

除了在第一个css动画完成后,如果我将鼠标放在$(this)元素上,transitionend事件将不会触发时,它似乎有效。只要我将鼠标从元素上移开,一切都会完美无缺。

我真的很茫然这个,有什么想法吗?我正在使用animate.css中的css类。

1 个答案:

答案 0 :(得分:11)

您没有收到transitionend事件,因为您没有使用CSS转换;你正在使用CSS动画。 animatedfadeOutanimate.css类的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;
}

.animated.fadeOut {
    -webkit-animation-name: fadeOut;
    -moz-animation-name: fadeOut;
    -o-animation-name: fadeOut;
    animation-name: fadeOut;
}

@-webkit-keyframes fadeOut {
    0% {opacity: 1;}
    100% {opacity: 0;}
}

@-moz-keyframes fadeOut {
    0% {opacity: 1;}
    100% {opacity: 0;}
}

@-o-keyframes fadeOut {
    0% {opacity: 1;}
    100% {opacity: 0;}
}

@keyframes fadeOut {
    0% {opacity: 1;}
    100% {opacity: 0;}
}

.animated.fadeOut {
    -webkit-animation-name: fadeOut;
    -moz-animation-name: fadeOut;
    -o-animation-name: fadeOut;
    animation-name: fadeOut;
}

那不是CSS transition,而是CSS animation。它们会在完成时触发不同的事件。

替换它:

$(this).on('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend',

用这个:

$(this).on('webkitAnimationEnd oanimationend oAnimationEnd msAnimationEnd animationend',

我认为一切都应该正常。

当你把$(this)元素掉了下来时,事情发生的事实,我怀疑是巧合;也许你有一个完全独立的处理程序,比如mouseout处理程序,具有类似的行为,你误以为transitionend处理程序,或者你可能在悬停时应用了一些CSS转换,其中一个是触发与fadeOut完全无关的transitionend事件?