項目的需求是給五個元素先添加一個動畫,在動畫執行完成后再給五個元素添加另外一個動畫。元素以數組的形式保存在了arr中,實際在執行的過程中發現section.removeEventListener("animationend",down.bind(this,arr,section),false)這一句沒有正常生效,在for循環執行完成后,會反復再次執行down(arr,section)這個方法。中間插入clear()這個方法的執行結果。判斷是在section這個元素上“animationend”執行完成后,同時綁定了down()和clear()兩個方法的原因導致的?,F在問題就是不理解為什么removerEventListener()這個方法會不生效//?給元素的父級元素添加監聽animationend事件,避免元素結束動畫時間不一致導致重復執行事件
????????//?使用bind方法綁定執行環境且傳遞兩個數組和父元素
????????section.addEventListener("animationend",down.bind(this,arr,section),false)
????????//?var?bb=down.bind(this,arr,section,bb)
????????//?定義方法,在上升動畫執行完畢后觸發。
????????function?down(arr,section){
????????????//?console.log(le)
????????????console.log(section)
????????????//?刪除父級元素中綁定的動畫結束后執行的方法
????????????section.removeEventListener("animationend",down.bind(this,arr,section),false)
????????????//?var?kk=down.bind(this,arr,section,bb)
????????????????//?var?le=arr[i]
????????????????//?console.log(kk==bb)
????????????????//?遍歷數組,為元素綁定下降的動畫
????????????console.log(arr[1].style.animationName)
????????????????for(var?j=0;j<arr.length;j++){
????????????????????console.log(arr[j].style.animationName)
????????????????????arr[j].style.animation="bb?1s"
????????????????????console.log(arr[j].style.animationName)
????????????????????arr[j].style.animationTimingFunction="cubic-bezier(0.25,0.5,0.75,1)"
????????????????//?le.style.animationFillMode="forwards"
????????????????console.log(arr[j])
????????????????}
????????????//?監聽父級元素,在所有元素下降動畫執行完畢后,執行清除方法,清除元素的動畫
????????????section.addEventListener("animationend",clear.bind(this,arr),false)
使用addEventListener在函數體外綁定的函數,在函數體內無法取消綁定
心為形役
2017-10-26 09:41:26