写在前面

记得以前facebook做过一款HTML5游戏。开场动画是一块软体类似豆腐的东西一起摇摆。类似的效果如下面的gif所示:

facebook当时使用的是createjs下的子项目easeljs和tweenjs去制作,基于Canvas的动画。基本的原理主要是:循环运动Canvas抽象的DisplayObject的skewX和scaleY来实现软体摇摆。
目前来看transformjs也能做到,因为transformjs也能运动skewX和scaleY。先来看看facebook的方式。

tweenjs + transformjs

注意这里的tweenjs是createjs下的子项目,而不是github上的tween.js项目。

var element = document.querySelector("#test");
Transform(element);
element.originY = 100;
element.skewX = -20;var Tween = createjs.Tween,sineInOutEase = createjs.Ease.sineInOut;
Tween.get(element, {loop: true}).to({scaleY: .8}, 450, sineInOutEase).to({scaleY: 1}, 450, sineInOutEase);
Tween.get(element, {loop: true}).to({skewX: 20}, 900, sineInOutEase).to({skewX: -20}, 900, sineInOutEase);

在线演示地址: http://alloyteam.github.io/AlloyTouch/transformjs/example/soft2.html
上面的代码很精简。这里稍微解释下:

  • 元素的初始skewX是-20,为了和scale的步调一致
  • 元素的originY是100,为的以企鹅的bottom center为基准点

可以看到,由于transformjs高度抽象,可以和tweenjs轻松搭配使用,没有任何压力。

AlloyFlow + transformjs

可能上面的代码不是很明白具体实现的流程?说实话,第一次看到上面的代码也没有一下看清晰流程。那么就使用AlloyFlow分解工作流的方式去实现同样的效果。

var element = document.querySelector("#test");
Transform(element);
element.originY = 100;
element.skewX = -20;function sineInOut(a) {return 0.5 * (1 - Math.cos(Math.PI * a));
}var alloyFlow = new AlloyFlow({workflow: [{work: function () {To.go(element, "scaleY", .8, 450, sineInOut);To.go(element, "skewX", 20, 900, sineInOut)},start: 0}, {work: function () {To.go(element, "scaleY", 1, 450, sineInOut)},start: 450}, {work: function () {To.go(element, "scaleY", .8, 450, sineInOut);To.go(element, "skewX", -20, 900, sineInOut)},start: 900}, {work: function () {To.go(element, "scaleY", 1, 450, sineInOut);},start: 1350}, {work: function () {this.start();},start: 1800}]
}).start();

在线演示地址: http://alloyteam.github.io/AlloyTouch/transformjs/example/soft.html
可以看到上面的workflow里面有一堆work按照start的时间依次序执行,最后在1800ms的时候调用this.start()会回到起点重新开始运行。还需要解释一下为什么选择sineInOut的easing。可以来看看其缓动图像:

sineInOut速率是先慢后快再慢,刚好符合软体自身约束作用力的模拟。
那么,AlloyFlow是何方神器?且听下回单独开篇分解。

开始transformjs之旅

有很多童鞋问,transformjs还能做什么酷炫特效?怎么在官网看到的都是简单的效果?
其实transformjs他只是提供了基础的transformation能力,不与时间、和运动库耦合。可以和任意时间运动库配合使用。所以怎么酷炫完全靠大家创意和想象力,搭配transformjs使用就对了。
transformjs会计算出matrix3d赋给dom的 transform msTransform OTransform MozTransform webkitTransform,保证硬件加速和兼容性的同时,不丢失可编程性,点个赞....

主页:http://alloyteam.github.io/AlloyTouch/transformjs/
Github :https://github.com/AlloyTeam/AlloyTouch/tree/master/transformjs

和transformjs一起摇摆相关推荐

  1. 一起摇摆html5游戏,和 transformjs 一起摇摆

    写在前面 记得以前 facebook 做过一款 HTML5 游戏.开场动画是一块软体类似豆腐的东西一起摇摆.类似的效果如下面的 gif 所示: facebook 当时使用的是 createjs 下的子 ...

  2. 一起摇摆html5游戏,和transformjs一起摇摆

    写在前面 记得以前facebook做过一款HTML5游戏.开场动画是一块软体类似豆腐的东西一起摇摆.类似的效果如下面的gif所示: facebook当时使用的是createjs下的子项目easeljs ...

  3. 贪心:Wiggle Subsequence 摇摆序列

    一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则该序列被称为 摇摆序列.一个小于2个元素的序列直接为摇摆序列.给一个随机序列,求这个序列满足摇摆序列定义的最长子序列的长度: 输入[1,1 ...

  4. [Leetcode] Wiggle Sort 摇摆排序

    Wiggle Sort Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= ...

  5. 天体摇摆仪的工作原理-测量电路中的部分电路波形

    ➤01 天体摇摆仪 在 天体摇摆仪的工作原理 中介绍了在视频 神奇的天体摇摆仪 中内部的电路,但是对于该电路工作的原理还存在一定的疑问.需要通过示波器测量对应个点的电压信号来进一步了解和确认它的工作原 ...

  6. 天体摇摆仪的工作原理

    01天体摇摆仪 在头条的西瓜视频看到一段拆解 神奇的天体摇摆仪 的视频.作者展示了一件天体摇摆仪桌面摆件从静止到启动的过程.之所以将这段视频看完,是因为在上个月初,在 山东大学开智能车竞赛技术研讨会 ...

  7. Silverlight C# 游戏开发:Flyer04让我们一起来摇摆吧

    接上回所述,咱们的飞行员已经开始往下飘落了,但是似乎少点什么,所谓没有危险那里来的乐趣,所以要增加一个敌人来搞定为主角造成点难度,本篇作为无聊,只是说了一些废话,重复了前几篇的代码,只是不过稍微做了一 ...

  8. Leetcode376摇摆序列--贪心+自动机

    题目 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个摆动 ...

  9. 日本电影《摇摆》:男人之间的心灵碰撞

    推理电影绝对是考验导演和观众的高智商电影.它故意将事件推向一个难分难解的极致,然后一点点地破题和披露真相,而此时电影本身的真实与否已经无所谓了,它变成了接受者一种智慧.逻辑和思想的高峰体验或游戏.这是 ...

最新文章

  1. python3 next()_Python3 File next() 方法 - Python 3 基础教程
  2. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.17 如何选择合适的拍摄地点...
  3. 兼容多种屏幕分辨率的通栏大图实现方法
  4. [leetcode-515-Find Largest Value in Each Tree Row]
  5. hbase1.1.1 连接集群_Hadoop2.7.1+Hbase1.1.2集群环境搭建(10) hadoop hbase kerberos
  6. 大白话5分钟带你走进人工智能-第十九节逻辑回归之优化点(4)
  7. PXC 安装 for 5.7
  8. C3P0连接池配置方式
  9. eclipse中使用svn导出项目,并运行
  10. 学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!
  11. 常用cmd操作Redis的命令
  12. python为图像设置标记_Python OpenCV 图像标记,取经之旅第 12 天
  13. float及float浮动坍塌问题
  14. 类的封装性、继承性和多态性设计
  15. 【网络工程师精华篇】超实用!100个网络基础知识汇总,网络工程师必备!
  16. 他是硅谷最好斗的华人 微软、谷歌、特斯拉都离不开他
  17. 贵州省谷歌卫星地图下载
  18. 解决小新13pro2020连接4k60hz显示器后,出现卡顿,查看刷新率只有30hz的问题
  19. 安卓开发(2):基本UI界面设计
  20. [Linux学习]语系查询及设置

热门文章

  1. golang 时间戳_go语言学习笔记(13)-defer函数、字符串常用函数和时间日期函数...
  2. vue中使用lazyload实现图片懒加载
  3. MyCat 数据库分片极简体验
  4. python中的content方法_content最新:python计算Content-MD5并获取文件的Content-MD5值方式_爱安网 LoveAn.com...
  5. python dict遍历性能_python 字典(dict)遍历的四种方法性能测试报告
  6. 创建mysql用户并在单个数据库上赋权
  7. php 容器对象,Laravel 6.2 中添加了可调用容器对象的方法
  8. mysql 8.0配置主从同步_MySQL 8.0 主从同步
  9. 荣耀v10玩flash游戏_沫子玩王者荣耀被打哭?直言这个游戏比吃鸡还难玩
  10. java实验6 词频统计_Java实现的词频统计——单元测试