在前端開發中,頁面的動畫效果非常重要,而其中css動畫是最常用的一種。但是有時候,我們需要在動畫結束之后才能進行一些操作,比如隱藏元素、改變樣式等等。那么如何判斷動畫何時結束呢?
首先我們需要了解css動畫的一些基礎知識,比如動畫結束的事件和如何監聽這個事件。css動畫有兩種結束事件,分別是animationend和transitionend。這兩個事件都是由css動畫觸發的,可以在事件回調函數中執行我們需要的操作。
// 監聽動畫結束事件 element.addEventListener('animationend', function(event) { // do something after animation ends }); element.addEventListener('transitionend', function(event) { // do something after transition ends });
在監聽到動畫結束事件之前,我們可以通過一個小技巧來判斷css動畫是否已經結束。這個技巧就是通過獲取元素的transition-duration和animation-duration屬性值,再加上animation-delay和transition-delay屬性值,計算出整個動畫的持續時間,然后加上一個適當的緩沖時間進行判斷。
// 判斷動畫是否結束 function isAnimationEnd(element) { var styles = window.getComputedStyle(element); var animationDuration = parseFloat(styles.getPropertyValue('animation-duration')) || 0; var transitionDuration = parseFloat(styles.getPropertyValue('transition-duration')) || 0; var animationDelay = parseFloat(styles.getPropertyValue('animation-delay')) || 0; var transitionDelay = parseFloat(styles.getPropertyValue('transition-delay')) || 0; var totalDuration = Math.max(animationDuration + animationDelay, transitionDuration + transitionDelay); var bufferTime = 100; // 適當的緩沖時間 return (element.currentTime >= (totalDuration + bufferTime)); }
以上是判斷css動畫是否結束的兩種方法,使用時可以根據需要選擇哪一種。在業務中,有時候還需要使用setInterval或requestAnimationFrame等方式來定時檢查動畫是否結束。