就像我们刚刚了解到的,我们可以看到与元素动画相关的事件:animationStart,animationIteration,animationEnd。但是如果我们想改变CSS animation(动画)执行过程中的动画,还需要一点技巧!
animation-play-state属性
当你想在动画执行过程中暂停,并且接下来让动画接着执行。这时CSS的animation-play-state属性是非常有用的。你可以可以通过JavaScript像这样更改CSS(注意你的前缀):
element.style.webkitAnimationPlayState = "paused"
element.style.webkitAnimationPlayState = "running"
然而当使用animation-play-state让CSS 动画暂停时,动画中的元素变形也会以相同的方式被阻止。你不能使这种变形暂停在某个状态,使它变形,使它恢复,更不用期望它能从新的变形状态中恢复到流畅运行。为了实现这些控制,我们需要做一些更复杂的工作。
获取当前keyvalue的百分比
不幸的是,在这个阶段没有办法获得当前CSS动画关键帧的“完成百分比”。最好的获取近似值的方法是使用setInterval 函数在动画过程中迭代100次。它的本质是:动画持续的时间(单位是毫秒)/100。例如,如果动画时长4秒,则得到的setInterval的执行时间是每40ms(4000 / 100)。
var showPercent = window.setInterval(function() {
if (currentPercent <100) {
currentPercent += 1
} else {
currentPercent = 0
}
// Updates a div that displays the current percent
result.innerHTML = currentPercent
}, 40)
这种做法很不理想,因为函数实际运行频率要远少于每40ms。我发现将它设为39ms更准确。但这个也不是好实现,因为它依赖于浏览器,并非所有浏览器下都能得到很完美效果。
获取当前动画的CSS属性值
在理想的情况下,我们选择一个使用CSS动画的元素,删除该元素当前动画再给它添加个新的动画,让它可以从当前状态开始新的动画。但是现实情况却很复杂。
下面我们就有一个演示,用来测试获取和改变CSS动画”中间流”的技术。该动画让一个元素沿一个圆形路径移动,起始位置在圆形的顶部中心(或称为“十二点”)位置。当按钮被单击时,元素的起始位置变成元素当前移动到的位置。元素会沿着之前相同的路径继续移动,只是现在“起始”的位置变成了你按下按钮时元素移动到的位置。通过在动画的第一关键帧把元素的颜色变成红色,来表示元素动画起始点位置发生了改变。
http://www.w3cplus.com/animation/controlling-css-animations-transitions-javascript.html
实现原理:用 js 建立若干个小的 box,然后将搜索结果分别移位放置到 box 里面,然后预先定义一个时间,让预先定义好的 box 做一个移位,看起来像机器人变形。
或者,换一个角度讲:百度搜索结果的变形金刚可以看做:通过 js 建立一些 box,让 box 做变型,然后将搜索结果当做颜色一样填充在机器人表面!制作一个机器人变形不好玩!而百度这个微原创,是将搜索结果和机器人变形结合起来,看起来就有点意思了。
其实这样好玩的javascript 效果代码非常多!而让人感觉到耳目一新、有意思的创新是需要将那些“死代码”包装、整合起来的。
实现原理讲解出来是挺简单的,如果要程序员做这样一个动画,其实是很麻烦的。因为机器人变形是要预算算出来的,放在数组里面预定义好。像这样一个机器人变形,要用到接近600个数据。就像以前股沟网Google.com的logo特效,很多都是要预先存储很多数据,才能展现动画效果。
这也正是 js 动画迟迟没有发展的一个重要原因:js几乎没有处理图像功能,完全依靠css,浏览器自身的一些效果来模拟动画。而 flash 的as 因为有flash客户端 ,可以直接处理图像,处理矢量图像,制作动画是相当轻松。
历代变形金刚动画的集合如下,分为美版和日版。附带了集数,日版附带了播放日期。
首先是纯美版的东西,按顺序排好。第一行是英文原文,第二行是为了汉语。
1.TRANSFORMERS (SEASON 1) 01-16
变形金刚(第一季)
2.TRANSFORMERS (SEASON 2) 17-65
变形金刚(第二季)
3.TRANSFORMERS THE MOVIE
变形金刚 电影
4.TRANSFORMERS (SEASON 3) 66-95
变形金刚(第三季)
5.TRANSFORMERS (SEASON 4) 96-98
变形金刚(第四季)[注:即REBIRTH/重生]
6.THE TRANSFORMERS GENERATION 2
变形金刚 第二代 [注:即G2 集数不详]
7.TRANSFORMERS BEAST WARS (FIRST SEASON) 01-26
变形金刚 野兽战争(第一季)
超能勇士
8.TRANSFORMERS BEAST WARS (SECOND SEASON) 27-39
变形金刚 野兽战争(第二季)
超能勇士
9.TRANSFORMERS BEAST WARS (THIRD SEASON) 40-52
变形金刚 野兽战争(第三季)
超能勇士
10.TRANSFORMERS BEAST MACHINES (SEASON 1) 01-13
变形金刚 野兽机器(第一季)
猛兽侠
11.TRANSFORMERS BEAST MACHINES (SEASON 2) 14-26
变形金刚 野兽机器(第二季)
猛兽侠
12.TRANSFORMERS ROBOTS IN DISGUISE 01-39
变形金刚 伪装机器人
变形金刚 汽车人战记 [注:即RID 对应日版CAR ROBOT]
13.TRANSFORMERS ARMADA 01-52
变形金刚 舰队 [注:对应日版MICRON传说]
14.TRANSFORMERS ENERGON 01-51
变形金刚 能量体
变形金刚 能量争夺战 [注:对应日版SUPER LINK]
15.TRANSFORMERS CYBERTRON ROBOTS IN DISGUISE 01-51
变形金刚 塞博特隆 伪装机器人
变形金刚 塞博特恩传奇 [注:对应日版GALAXY FORCE]
下面是日本方面。还是首行原文,二行英文,三行翻译的,四行大家熟知的翻译。
1.戦え!超ロボット生命体トランスフォーマー 01-63 (1985.7.6-1986.11.7)
FIGHT!SUPER ROBOT LIFEFORM TRANSFORMERS
战斗吧!超级机器人生命体 变形金刚 [注:对应美版一二季]
2.スクランブルシティ発动编
SCRAMBLE CITY
紧急都市 发动篇 [注:日版独立单集OVA]
3.トランスフォーマー ザ�9�9ムービー
TRANSFORMERS THE MOVIE
变形金刚 电影
4.戦え!超ロボット生命体トランスフォーマー2010 01-30 (1986.11.14-1987.6.25)
FIGHT!SUPER ROBOT LIFEFORM TRANSFORMERS 2010
战斗吧!超级机器人生命体 变形金刚 2010 [注:对应美版第三季]
5.トランスフォーマー ザ★ヘッドマスターズ 01-35 (1987.7.3-1988.3.28)
TRANSFORMERS THE HEADMASTERS
变形金刚 头领战士
6.戦え!超ロボット生命体トランスフォーマー 英雄伝说编
FIGHT! SUPER ROBOT LIFEFORM TRANSFORMERS THE CHAPTER OF HERO LEGEND
战斗吧!超级机器人生命体 变形金刚 英雄传说篇
7.トランスフォーマー 超神マスターフォース 01-42/47 (1988.4.12-1989.2.28)
TRANSFORMERS SUPER-GOD MASTER FORCE
变形金刚 超神战士部队
变形金刚 隐者战士
8.戦え!超ロボット生命体トランスフォーマーV(ビクトリー) 01-38/44 (1989.3.14-1989-12.19)
FIGHT!SUPER ROBOT LIFEFORM TRANSFORMERS VICTORY
战斗吧!超级机器人生命体 变形金刚 V(胜利)
胜利之斗争
9.トランスフォーマーZ(ゾーン)
TRANSFORMERS ZONE
变形金刚 Z(地带)
10.超生命体トランスフォーマー ビーストウォーズ 01-26 (1997.10~1998.3)
SUPER LIFEFORM TRANSFORMERS BEAST WARS
超级生命体变形金刚 野兽战争
超能勇士 [注:对应美版第一季]
11.超生命体トランスフォーマー ビーストウォーズ 激突!ビースト戦士
SUPER LIFEFORM TRANSFORMERS BEAST WARS CRASH! THE BEAST WARRIORS
超级生命体变形金刚 野兽战争 激战!野兽战士
12.超生命体トランスフォーマー ビーストウォーズⅡ(セカンド) 01-43 (1998.4~1999.1)
SUPER LIFEFORM TRANSFORMERS BEAST WARS SECOND
超级生命体变形金刚 野兽战争 Ⅱ(第二部) [注:日本的美BW一季续作]
13.超生命体トランスフォーマー ビーストウォーズⅡ(セカンド) ライオコンボイ危机一髪!
SUPER LIFEFORM TRANSFORMERS BEAST WARS SECOND LIO CONVOY IN IMMINENT DANGER!
超级生命体变形金刚 野兽战争 Ⅱ 白狮擎天柱千钧一发! [注:日BW 2的电影版]
14.超生命体トランスフォーマー ビーストウォーズ ネオ 01-35 (1999.2~1999.9)
SUPER LIFEFORM TRANSFORMERS BEAST WARS NEO
超级生命体变形金刚 新野兽战争 [注:日BW 2的续作]
15.超生命体トランスフォーマー ビーストウォーズ メタルス コンボイ大変身!
超级生命体变形金刚 野兽战争 金属 擎天柱大变身! [注:擎天柱/CONVOY即黑猩猩]
16.超生命体トランスフォーマー ビーストウォーズ メタルス 01-26 (1999.10~2000.3)
SUPER LIFEFORM TRANSFORMERS BEAST WARS METALS
超级生命体变形金刚 野兽战争 金属 [注:对应美版二三季]
17.超生命体トランスフォーマー ビーストウォーズ リターンズ 01-26
SUPER LIFEFORM TRANSFORMERS BEAST WARS RETURNS [注:对应美版BM]
超级生命体变形金刚 野兽战争 归来 (2005.4.2~2005.10.1)
猛兽侠
18.トランスフォーマー カーロボット01-39 (2000.4.5~2000.12.20)
TRANSFORMERS CAR ROBOT
变形金刚 车辆机器人
(俗称)TF2000
19.超ロボット生命体トランスフォーマー マイクロン伝说 01-52
SUPER ROBOT LIFEFORM TRANSFORMERS LEGEND OF MICRON (2003.1.10~2003.12.26)
超级机器人生命体变形金刚 微型金刚传说
20.トランスフォーマー スーパーリンク 01-51+1 (2004.1.19~2004.12.24)
TRANSFORMERS SUPER LINK
变形金刚 超级合体
21.トランスフォーマー ギャラクシーフォース 01-52 (2005.1.8~2005.12.31)
TRANSFORMERS GALAXY FORCE
变形金刚 银河之力
日版夹在美版的顺序:美2-日2-美3,美5-日5至9-美6,美7-日12至14-美8。