Javascript 对 CSS3 animation 动画的流程的简单控制

LogicAegis
• 阅读 8206

Javascript 对 CSS3 animation 动画的流程的简单控制

CSS3的animation是一个好东西,能让页面动画更加纯净流畅,但是之前一扯到动画流程的控制(比如执行完第一个动画后再执行第二个动画在执行某个动作)就有点懵逼
Javascript 对 CSS3 animation 动画的流程的简单控制

如果是jQuery动画呢,有回调函数(或者.promise().done()),方便滴狠呐!但是animation 呢。。呢。。。呢。。。。呢。。。。。呢。。。。。。

粗粗的想一想吧,貌似给元素加上第一个动画的类后根据第一个动画的执行时间来设置个延迟再加入第二个动画的类也是可以实现的,但是总觉得这样不干净,而且setTimeout其实也不是那么的可控,

然后塔哒,就遇到这篇文章你若触发,我就处理,讲的是JS事件响应的,对, 事!件!响!应!。如果动画结束时能有能触发某个事件,JS再监听响应一下,这不就完事儿了吗?

诶,万能的JS还真有Javascript 对 CSS3 animation 动画的流程的简单控制

CSS动画事件 animationstart,animationend和animationiteration

看着三个事件名字就知道,这三个事件分别对应动画开始前,动画结束后,动画进行中,不废话了,直接上个demo

实现了个简单的删除动画,第一步让元素出视野,第二步让元素heightmargin,paddind等都塌陷,最后直接移除元素

<script async src="//jsfiddle.net/waynecz/fd8yz8bh/embed/"></script>

有两个自己觉得要注意的地方写下注释

on('.m1', 'animationend', function() {
  // this.classList获取的是一个DOMtokenList并不是真的数组所以要转换一下
  var classlist = Array.prototype.slice.apply(this.classList);
  // 因为有两个动画,所以要判定是哪一个动画结束了来执行下一阶段
  if (classlist.indexOf('dnone') == -1) {
    this.classList.add('dnone')
  } else {
    setTimeout(function() {
      this.parentNode.removeChild(this)
    }, 1000)
  }
})

on('button', 'click', function() {
  select('.m1').classList.toggle('leave');
})

function select(selector) {
  return document.querySelector(selector)
}

function on(selector, eventName, cb) {
  select(selector).addEventListener(eventName, cb);
}

这么一看其实也是很简单的哈哈,顺带一提起时transition过渡动画也有个事件transitionend

最后,兼容性

  1. CSS3动画相关属性的兼容性可以看这里

  2. animation事件,一般只需加两种前缀就可以了
    webkit前缀:webkitAnimationStart
    MS前缀:MSAnimationStart (IE10+)
    比如

Object.prototype.perfixOn = function (eventName, cb) {
    var perfix = ['webkit', 'MS', '']
    for (var i = perfix.length - 1; i >= 0; i--) {
        if (perfix[i] != '') {
            eventName.replace(/^(\w)/, function ($1) {
                return $1.toUpperCase()
            })
        }
        this.addEventListener(perfix[i] + eventName, cb, false);
    }
}
Obj.perfixOn('animationend', cb)

讲的很粗糙,有不正确的地方请多指教

点赞
收藏
评论区
推荐文章
徐小夕 徐小夕
4年前
轻松教你使用纯css实现水波动画
css3给我们前端开发带来了很便利,我们可以使用css3的新特新实现各种形状和动效,接下来笔者就来带大家介绍如何用css3实现H5Dooring编辑器(https://github.com/MrXujiang/h5Dooring)中的水波动画.(https://imghelloworld.osscnbeijing.aliy
徐小夕 徐小夕
4年前
用css3实现惊艳面试官的背景即背景动画(高级附源码
我们传统的前端更多的是用javascript实现各种复杂动画,自从有了Css3transition和animation以来,前端开发在动画这一块有了更高的自由度和格局,对动画的开发也越来越容易。这篇文章就让我们汇总一下使用Css3实现的各种特效。这篇文章参考《css揭秘》这本书,并作出了自己的总结,希望能让大家更有收获,也强烈推荐大家看看这本书,你值得拥有
徐小夕 徐小夕
4年前
轻松教你使用纯css实现H5-Doorin编辑器中的水波动画
css3给我们前端开发带来了很便利,我们可以使用css3的新特性实现各种形状和动效,接下来笔者就来带大家介绍如何用css3实现H5Dooring编辑器(https://github.com/MrXujiang/h5Dooring)中的水波动画.(https://imghelloworld.osscnbeijing.aliy
徐小夕 徐小夕
4年前
如何使用css3实现一个类在线直播的队列动画
之前在群里有个朋友问了这样一个问题,就是如何在小程序中实现类似直播平台的用户上线时的队列动画?作为一名前端工程师,解决方案无非以下2种:1.使用javascript根据条件来控制元素的样式实现队列动画2.用纯css3配合数据驱动模型来实现.大家都知道在现代的Web开发中,我们能使用Css实现的效果尽量不要用Js,所以我们应该优先考虑用C
Chase620 Chase620
4年前
CSS3动画之逐帧动画
CSS3动画开发指南第二弹,剥丝抽茧为你解析逐帧动画,同时放送从实战经验中总结出来的逐帧动画使用技巧。什么是逐帧动画要了解CSS3逐帧动画,首先要明确什么是逐帧动画。看一下维基百科中的定义:定格动画,又名逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果。简而言之,实现逐帧动画需要两个条件:(1)相关联
Wesley13 Wesley13
3年前
H5实现APP和原生方式有多大差距,多少坑?JS才是王道!
纯H5的APP,虽然开发起来要比纯原生开发畅快的多,但最终效果和性能还是和原生比起来还是有很多问题,主要聚集在以下几个方面:1、动画动画有很多种,比如侧边栏菜单的滑入滑出、元素的响应动画、页面切换之间的过场等等,在H5之下的众多实现方法都没有办法达到纯原生的性能。一般有这几种不同的选择:css3动画,javascript动画,原生动画。cs
Stella981 Stella981
3年前
CocosCreator 教你玩转Animation动画(第十四篇)
前言:Animation动画在游戏中是必不可少的,各种人物的走跑跳飞,以及各种表情动作,反正做游戏Animation动画是必修课了。这一篇章可以学会制作和控制各种动画,主要从一下几个方面介绍:1.动画制作流程;2.使用Animation动画编辑器制作动画;3.代码控制动画;一、动画制作的流程
Wesley13 Wesley13
3年前
Unity中Animator的2DSprite动画控制与使用
关于Unity动画系统几个名词概念,需要了解一下:Animator:动画控制器,控制Mecanim动画系统的接口。Animation:animation组件用于播放动画AnimationClip:动画剪辑片段,储存基于关键帧的动画,是用于Animation来播放动画。Animation编辑面板:此面板可以进行动画的调整,crtl6打开ani
Wesley13 Wesley13
3年前
View动画和Drawable动画
View动画你可以使用view动画系统执行Views的补间动画。补间动画通过诸如起始点,终止点,大小,旋转,和一个动画其他通用的aspects等信息来计算动画。一个补间动画可以在一个View对象的内容上执行一系列简单的变换(位置,大小,旋转,透明度)。因此,如果你有一个TextView(https://www.oschina.net
Stella981 Stella981
3年前
Css3 Animation 动画十二原则
前言本文主要介绍了CSS3动画基本原理和常用形式作为前端的设计师和工程师,我们用CSS去做样式、定位并创建出好看的网站。我们经常用CSS去添加页面的运动过渡效果甚至动画,但我们经常做的不过如此。动效是一个有助于访客和用户理解我们设计的强有力工具。这里有些原则能最大限度地应用在我们的工作中。迪士尼经过基础工作练习的长时间
绣鸾 绣鸾
1年前
Moho Pro 14 for Mac(2D动画制作软件)
是一款专业的2D动画制作软件。它具有强大的功能和工具,适用于动画制作师、插画师和设计师。MohoPro14提供了丰富的动画功能,包括骨骼动画、形状插值、帧逐帧动画等。您可以使用骨骼工具来创建复杂的角色动画,通过设置骨骼关节和控制器,实现自然流畅的动作。形状