webkitAnimationEnd动画事件
春节终于过完了,自己春节似乎过的有点大,过完春节之后,态度一直没有调整好,总有一股过节的情绪,没有完全进入学习和工作的状态来。继续调整当中……
这两天项目中遇到一个小需求,十分类似于支付宝蚂蚁森林给小树苗浇水的效果,需要有一个浇水的动作,然后小树苗有点长大的感觉。
思来想去,最好的效果应该是用canvas画一下,受制于技术水平的限制,只能退而求其次,选择css3的动画效果(APP项目,css3兼容性问题可以通过前缀webkit解决)。
最终效果是:草地上有几棵小树苗,在完成某一动作之后,出现一个小水壶对小树苗浇点水,然后小树苗左右晃动几次,稍微变大一点。
最终实现的是:水壶浇水的动作做成了gif动画图片,在指定事件触发之后,水壶从右上角飞出,做出浇水动作,在浇水动作完成之后,小树苗开始晃动生长,并且水壶消失。
css3动画部分都属于比较好实现的部分,唯一需要注意的是,也是比较繁杂的是,动作需要逼真一点的话,那就得反复修改动画的细节参数,这里略过。这里我们需要关心的是:水壶浇水的动作完成之后,怎么界定这个动作完成了。
第一想法是:延时定时器,setTimeout,设定一个与水壶浇水一样时间的延时。但是既然是定时器,就必然存在阻塞的状态,如果出现阻塞,那么很可能两个动画就不会连贯执行。
那还能怎么办呢?
其实,css3为animation提供了一组动画事件,即webkitAnimationStart-动画开始,webkitAnimationEnd-动画结束,webkitAnimationIteration-动画重复播放 ,即可以很方便的监听动画过程。
项目中选择zepto来操作DOM
$(document.body).on('swing', function(){
$('.bottle').show().addClass('bottle-fadeIn');
$('.bottle').on('webkitAnimationEnd',function(){
$('.bottle').hide();
$('.tree').each(function(){
var index = (Math.random()*3).toFixed(2);
var self = this;
setTimeout(function(){
$(self).addClass('a-swing');
}, 200*index);
});
});
$('.tree').on('webkitAnimationEnd',function(){
$('.tree').css({'-webkit-transform':'scale(1.2,1.2)'});
$('.tree').removeClass('a-swing');
}) ;
});
在body体上自定义事件swing,以便在需要的时候出发即可。
class为bottle-fadeIn,是为水壶添加的渐现的动画,然后监听水壶动画结束的时间点,再触发小树苗生长的动画,为了不让多个树苗往同一个方向同一时间晃动,就定义了一个随机数index,对每一棵小树苗延迟添加动画class a-swing,并且监听小树苗动画结束之后,直接将小树苗直接放大1.2倍。
基本完成小需求了,就我个人而言还存在很多遗憾,效果并不理想。
webkitAnimationEnd动画事件的更多相关文章
- android图片透明度跟缩放大小动画事件
概序 : 动画事件写在xml中,然后用AnimationUtils去加载动画事件,再监听动画结束事件,隐藏imageview. 1. player_double_click_animation.xml ...
- CSS3动画事件
CSS3 的动画效果强大,在移动端使用广泛,动画执行开始和结束都可以使用JS来监听其事件. animationstart animationend 以下是一个示例 <!DOCTYPE html& ...
- 关于Animation动画事件的几项测试
测试版本unity5.3.4 1.当帧率不足时,Animation会跳帧,假如跳帧超过动画事件的帧,动画事件也会执行. 2.当Animation混合时,混合中的动画不管哪个当前有动画事件,都会执行. ...
- css3 animation动画事件
当使用css3时,会遇到利用@keyframes来定义动画事件,利用以下3个事件,能够捕捉当前元素的动画: AnimationEnd //动画结束时 AnimationStart //动画開始 An ...
- [Unity动画]03.动画事件
1.找到动画,添加动画事件 2.在脚本中添加回调方法 TestAnimator.cs using UnityEngine; public class TestAnimator : MonoBehavi ...
- Unity动画事件
动画事件添加 var clip = new AnimationClip();//clip,动画剪辑 储存基于动画的关键帧.这里新建动画剪辑 clip.SetCurve ("", ...
- Unity3D NGUI UIPlayTween(原UIButtonTween)动画事件详解
http://blog.csdn.net/asd237241291/article/details/8507817 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 Unity3D引擎技术 ...
- DragonBones龙骨骨骼中的自定义事件(另有声音、动画事件)
参考: DragonBones骨骼动画事件系统详解 一.在DragonBones中添加自定义事件帧 动画制作时 时间轴拉到最下面有一个事件层,添加一个事件帧 左边属性面板定义自定义事件 二.Egret ...
- 【VUE】@click加上v-bind绑定切换类名及动画事件
好长的名字... 效果是 点击元素,通过改变类名的方式让其改变颜色+移动动画效果,这里用的是v-bind和@click 废话不说 show me the code! <div id=" ...
随机推荐
- MySQL 绿色版安装Window 系统
为了便捷安装现在网上提供了许多的绿色版本MySQL安装包,下载后解压即可使用,但是MySQL 下载直接运行还是有一点小问题,需要把MYSQL 注册成为系统服务: 1.下载mysql绿色版本 例如:my ...
- mysql重复start stop slave测试
如题,测试重复start slave, stop slave是否会有报错. 版本 5.7.21 重复start slave测试 第一次start >start slave; Query OK, ...
- 并行计算——理想的PRAM模型
PRAM(Parallel Random Access Machine)模型是多指令流多数据流(MIMD)并行机中的一种具有共享存储的模型.它假设有一个无限大容量的共享存储器,并且有多个功能相同的处理 ...
- Java第03次实验提纲(面向对象1-基本概念)
0. 将码云的项目clone到本机 请参考使用Eclipse Egit与码云管理你的代码中的3 从码云将项目clone到你的电脑 之后就可以在Eclipse中提交本地项目新增或修改的文件.如果在Ecl ...
- NGUI的数据绑定
ngui 的binding搜索结果 少之甚少 .即便去作者的youtube也收获不大 . 开发工作者更关心的是 数据的绑定,而不是一个显示控件简单属性的绑定. 说白了就是告诉用户 怎么绑定model吧 ...
- Mongo查询分组
db.test.aggregate( {'$match':{"url":/http:\/\/www.baidu.cn\/member\/T107581\//}}, {'$group ...
- flume 1.7在windows下的安装与运行
flume 1.7在windows下的安装与运行 一.安装 安装java,配置环境变量. 安装flume,flume的官网http://flume.apache.org/,下载地址,下载后直接解压即可 ...
- jquery ajax的load()方法和load()事件
1.使用 AJAX 请求来改变 div 元素的文本: $("button").click(function(){ $("div").load('demo_aja ...
- [转][C#]Web.config 相关配置
设置默认首页 <?xml version="1.0" encoding="UTF-8"?> <configuration> <sy ...
- python打包--pyinstaller打包报错
先来一段报错信息 目前打包主要涉及socket模块出现的报错 missing module named resource - imported by posix, C:\Users\Administ ...