使用CSS事件

课后整理 2020-12-10

transitionEnd事件

CSS的过渡效果(transition)结束后,触发transitionEnd事件。例如:

el.addEventListener('transitionend',  onTransitionEnd, false);
function  onTransitionEnd() {
    console.log('Transition  end');
}

transitionEnd的事件对象具有以下属性。

实际使用transitionend事件时,可能需要添加浏览器前缀。

el.addEventListener('webkitTransitionEnd',  function () {
      el.style.transition = 'none';
});

animationstart、animationend、animationiteration事件

CSS动画有以下三个事件。

【示例】这三个事件的事件对象,都有animationName属性(返回产生过渡效果的CSS属性名)和elapsedTime属性(动画已经运行的秒数)。对于animationstart事件,elapsedTime属性等于0,除非animation-delay属性等于负值。

var  el = document.getElementById("animation");
el.addEventListener("animationstart",  listener, false);
el.addEventListener("animationend",  listener, false);
el.addEventListener("animationiteration",  listener, false);
function  listener(e) {
  var li =  document.createElement("li");
  switch(e.type) {
    case "animationstart":
      li.innerHTML = "Started: elapsed  time is " + e.elapsedTime;
      break;
    case "animationend":
      li.innerHTML = "Ended: elapsed time  is " + e.elapsedTime;
      break;
    case "animationiteration":
      li.innerHTML = "New loop started at  time " + e.elapsedTime;
      break;
  }
   document.getElementById("output").appendChild(li);
}

上面代码的运行结果是下面的样子。

Started:  elapsed time is 0
New  loop started at time 3.01200008392334
New  loop started at time 6.00600004196167
Ended:  elapsed time is 9.234000205993652

animation-play-state属性可以控制动画的状态(暂停/播放),该属性需要加上浏览器前缀。

element.style.webkitAnimationPlayState  = "paused";
element.style.webkitAnimationPlayState  = "running";