1. 程式人生 > >animationend和transitionend多次執行的問題解決方案

animationend和transitionend多次執行的問題解決方案

對於animationend事件來說的話,如果我們在外層新增這個事件監聽,如果監聽元素裡面還有動畫,則裡面元素動畫結束也會執行這個animationend事件。所以我們可以這樣做:

$('.ele').on('animationend webkitAnimationEnd',function(e){
    if(e.target === this) {
        console.log('end');
    }
})

$('.ele').on('animationend webkitAnimationEnd',function(e){
    if(e.target === e.currentTarget) {
        console.log('end');
    }
})

對於transitionend事件多次執行,一般情況下是因為監聽元素有多個屬性同時變化,所以執行多次transitionend事件,而且如果裡面有子元素還會監聽子元素的end事件,所以我們針對transitionEnd事件需要這樣做:
var transitionFlag = true;

//ele.addEventListener('webkitTransitionEnd',function(e){},false);
$('.ele').on('transitionend webkitTransitionEnd',function(e){
    if(e.target === e.currentTarget && transitionFlag) {
        transitionFlag = false;
        console.log('end');
    }
})


$('.ele').on('transitionend webkitTransitionEnd',function(e){
    if(e.target === this && transitionFlag) {
        transitionFlag = false;
        console.log('end');
    }
})