热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:如何用JavaScript捕获CSS3的动画事件

本文由编程笔记#小编为大家整理,主要介绍了如何用JavaScript捕获CSS3的动画事件相关的知识,希望对你有一定的参考价值。CSS3动画执行起来平滑且快速,但不像
本文由编程笔记#小编为大家整理,主要介绍了如何用Javascript捕获CSS3的动画事件相关的知识,希望对你有一定的参考价值。



CSS3动画执行起来平滑且快速,但不像Javascript动画,你可以一帧一帧控制。幸运的是,你可以在任何一个元素上使用事件处理来决定动画的状态。同时它支持连续播放不同动画这种细粒度的控制。

来看下这个简单的CSS3动画:









  1. #anim.enable





  2. {





  3.  -webkit-animation: flash 1s ease 3;





  4.  -moz-animation: flash 1s ease 3;





  5.  -ms-animation: flash 1s ease 3;





  6.  -o-animation: flash 1s ease 3;





  7.  animation: flash 1s ease 3;





  8. }









  9. /* animation */





  10. @-webkit-keyframes flash {





  11.  50% { opacity: 0; }





  12. }









  13. @-moz-keyframes flash {





  14.  50% { opacity: 0; }





  15. }









  16. @-ms-keyframes flash {





  17.  50% { opacity: 0; }





  18. }









  19. @-o-keyframes flash {





  20.  50% { opacity: 0; }





  21. }









  22. @keyframes flash {





  23.  50% { opacity: 0; }





  24. }





enable类应用于ID为 anim 的元素时,名为flash的动画将运行三次。每次运行持续一秒钟,在此过程中,元素会在其中淡出淡入。

动画运行时会触发三种类型的事件:

animationstart









  1. var anim = document.getElementById("anim");





  2. anim.addEventListener("animationstart", AnimationListener, false);





动画第一次启动时,animationstart 事件触发。

animationiteration









  1. `anim.addEventListener("animationiteration", AnimationListener, false);`





animationinteration事件会在每一次新的动画执行过程中被触发,即除了第一次之外的每一个迭代过程。

animationend









  1. `anim.addEventListener("animationend", AnimationListener, false);`





animationend事件会在动画结束时被触发。


浏览器兼容性

在撰写本文时,Firefox,Chrome,Safari,Opera和IE10支持CSS3动画和相关联的事件处理程序。此外,Opera,IE10和webkit浏览器使用前缀,并在一些情况下做出很棒的支持...

W3C 标准中 FirefoxwebkitOperaIE10animationstart animationstart webkitAnimationStart oanimationstart MSAnimationStart animationiteration animationiteration webkitAnimationIteration oanimationiteration MSAnimationIteration animationend animationend webkitAnimationEnd oanimationendMSAnimationEnd 等事件

前缀最简单的方法是使用自定义函数为所有前缀和非前缀名称调用addEventListener:









  1. var pfx = ["webkit", "moz", "MS", "o", ""];





  2. function PrefixedEvent(element, type, callback) {





  3.  for (var p = 0; p code>





现在可以使用一行简单代码分配跨浏览器事件处理程序:









  1. // animation listener events





  2. PrefixedEvent(anim, "AnimationStart", AnimationListener);





  3. PrefixedEvent(anim, "AnimationIteration", AnimationListener);





  4. PrefixedEvent(anim, "AnimationEnd", AnimationListener);






事件对象

在上面的代码中,每当动画事件发生时,都会调用AnimationListener函数。事件对象作为单个参数传递。除了标准的属性和方法外,还提供:



  • animationName:CSS3动画名称(即flash


  • elapsedTime:动画开始后以秒为单位的时间。


因此,我们可以检测flash动画结束的时间,例如









  1. if (e.animationName == "flash" &&





  2.    e.type.toLowerCase().indexOf("animationend") >= 0) {





  3.    ...





  4. }





这段代码就可以,例如,可以删除现有class或以特定顺序应用另一个CSS3动画。


更多来自本作者的内容

在Javascript演示中查看CSS3动画事件

演示页面显示一个按钮。当它被点击时,“enable”类被切换开始flash动画。当动画事件触发时,状态显示在控制台中。当动画结束时,“enable”类被删除,因此可以再次单击该按钮。

如果您在任何有趣的项目中使用动画事件捕获,可以告诉我们。











































往期精选文章





小手一抖,资料全有。长按二维码关注京程一灯,阅读更多技术文章和业界动态。



推荐阅读
author-avatar
哈罗xeh_406
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有