聊聊CSS动画的监听

还记得许多年前,我们为一个元素添加有一个动画class之后,你还在用settimeout来延迟下一个动作,这么做过时啦。
哪怎么做呢。
不是添加了一个类么,哪动画结束以后来执行这个动作呗。
哪么动画有两种,还是要区别对待的。
1.animation
2.transition

animation动画监听

-webkit-animation动画其实有三个事件:
开始事件 webkitAnimationStart
结束事件 webkitAnimationEnd
重复运动事件 webkitAnimationIteration

document.addEventListener("webkitAnimationStart", function(){ //动画开始时事件
        console.log("start");
    }, false);
    document.addEventListener("webkitAnimationEnd", function(){ //动画结束时事件
        console.log("end");
    }, false);
    document.addEventListener("webkitAnimationIteration", function(){ //动画重复运动时的事件
        console.log("next"); //第一遍动画完成输出end
    }, false);
transition动画监听
document.addEventListener("webkitTransitionEnd", function(){
    console.log("end");
}, false);

嗯 对 就是这么简单 后面的实际用例我会附上
待更新中。。。
这篇文章写出来以后,朋友反馈过来有兼容性问题。
iOS9一下和安卓4.4一下是不支持的。
因为现在大多数项目技术栈是vue,这里我就推荐使用vue的过渡钩子函数beforeLeave来解决这个问题,关于vue过渡常见的用法和解惑我会单独开一篇文章去写这个东西。
其他比较好的解决方案还是使用setTimeout去解决这个问题。

补充

https://developer.mozilla.org/en-US/docs/Web/Events/transitionend

el.addEventListener("transitionend"
  , e => 
    {
      const pseudoElement = e.pseudoElement // 触发动画的伪类
          , propertyName = e.propertyName   // 发生动画的CSS属性
          , elapsedTime = e.elapsedTime     // 动画的持续时间
      // ..................
    })

注意:每个启用TransitionCSS属性的分别对应独立的transitionend事件

/* 触发3个transitionend事件 */
transition: width 1s ease .6s,
            color .5s linear,
            background 2s ease-in-out;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,074评论 0 29
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,241评论 0 6
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 11,074评论 4 129
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,328评论 0 11
  • ---赠朋友张赣摄影作品 微漾春水映镜台, 小景呈诗醉情怀。 滴水芦草才雨后, 几只欢鹅向客来。
    苍云法尔阅读 339评论 2 1