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=" ...
随机推荐
- tornado 笔记
简单比较Django和Tornado Django是走大而全的方向,注重的是高效开发,最出名的是全自动化管理后台 Tornado走的是少而精的方向,注重的是性能的优化,最出名的是异步非堵塞 安装方式: ...
- git 查看提交历史
查看提交历史 git log 查看每次提交的具体改动内容 git log -p 查看某个文件历次提交的具体改动内容 git log -p <file name> # git log -p ...
- MySQL的瑞士军刀
这里主要讲mysql运维中的一些主要工具,这些工具可能大家都用过,特别是系统管理员或者做linux服务器维护的同学可能都知道这些小工具,这里讲得会比较多一些,除了系统监控的小工具,还包括一些mysql ...
- linux 创建软链接
ln –s 源文件 目标文件
- ubuntu-docker入门到放弃(五)docker网络管理
查看docker宿主机的网卡信息我们会发现,有一个docker0的网卡,这个网卡就是用于跟docker容器进行通讯的,这个网段跟我们docker容器的网段是一样的: #ifconfig docker容 ...
- linux的系统组成和计算机组成原理,linux常用操作
Linux入门 linux简介 学习目的:linux服务器操作系统稳定长期运行,python,pycharm装于linux上 linux系统组成 应用软件:调用系统软件接口 linux操作系统分两 ...
- esp8266尝鲜
请将当前用户添加到dialout组,否则会提示打开/dev/ttyUSB0权限不足 sudo usermod -a -G dialout `whoami` dmeg查看驱动安装信息 dmesg | g ...
- Mysql 【影响性能的几个方面】以及【性能优化顺序】
服务器性能 cpu 可用内存大小 网络 IO (增加IO子系统) mysql 存储引擎 数据库服务器配置参数(主要优化方向) 数据库结构设计,sql语句. 慢查询
- IDE0022 使用方法的表达式主体
这错误提示意思应该是:推荐您将此方法改为用“表达式主体”形式实现 所谓表达式主体,是类似 public void DisplayName() => Console.WriteLine(ToStr ...
- 补充appium -api
//锁屏 driver.lockScreen(2); //判断是否锁屏 driver.isLocked(); //截屏并保存至本地 File screen = driver.getScreenshot ...