Google粘土动画纯Javascript代码实现
来源:互联网 发布:淘宝虚假交易扣分原则 编辑:程序博客网 时间:2024/04/30 03:44
美国粘土动画大师诞辰90周年之际,Google的Doodle换成了一组粘土动画,效果逼人:
纯HTML/CSS/Javascript实现,Google的工程师技术水平让大家眼红啊。于是一大批程序员开始依样画葫芦,自己动手实现该效果。
从网上下载看了一些,觉得和Google原版的都多少有一些差异,于是我也手痒,小COPY了一下:
演示地址:http://longzuyuan.cn/doodle/clokey/index.htm (有时网速有点慢,请耐心,小绿人岗比图片大一点,有时可能加载不出来,可下载看。不太清楚怎么把效果加到博客正文,知道的还望分享一下。)
下载地址:http://longzuyuan.cn/doodle/download/clokey.zip
首先HTML:
<div id="logo-gumby-hold"></div><div id="logo-gumby"></div><div id="logo-gumby-loop"></div><div id="logo-blockheads-hold"></div><div id="logo-blockheads"></div><div id="logo-prickle-hold"></div><div id="logo-prickle"></div><div id="logo-goo-hold"></div><div id="logo-goo"></div><div id="logo-pokey-hold"></div><div id="logo-pokey"></div>
XXX-hold 是用来显示初始画面的,XXX-loop 是用来显示小绿人岗比的初始循环动画,其它都是显示动画的。
然后用JS定义N个要动画的对象:
var allIMG = { //所有图片数组 "logo-blockheads": { picture: "blockheads.jpg", left: 31, top: 35, width: 135, height: 156, frames: 89, positionX: 0, positionY: 0, stopMouseEvent: boolNo, click: function() { clickEvent("logo-blockheads") }, over: function() { mouseOverOrOut("logo-blockheads", boolYes) }, out: function() { mouseOverOrOut("logo-blockheads", boolNo) } } ......
并且在入口函数里绑定属性和方法,这使得添加和修改一个新的对象变的容易多了。
然后定义一个面向对象模型,它有基本的动画属性和方法:
var model = function(imgName, f) { var b = allIMG[imgName]; this.id = imgName; this.element = document.getElementById(this.id); this.g = b.positionX || 0; this.frame = 0; this.frames = b.frames; this.playing = boolNo; this.width = b.width; this.s = f || {} }; model.prototype.start = function(a) { if (!a && !this.playing) { this.playing = boolYes; allIMG[this.id].stopMouseEvent = boolYes; this.frame = 0 } }; //是否正在播放 model.prototype.isPlaying = function() { return this.playing }; model.prototype.w = function() { if (this.s) { var a = this.s[this.frame]; a && a() } }; model.prototype.animate = function() { this.frame++; if (this.frame == this.frames) { this.playing = d; allIMG[this.id].stopMouseEvent = boolNo } else { setBackgroundPosttion(this.element, this.g + this.frame * this.width, this.h); this.w() } };
再定义一个面向对象模型继承上面的对象,并重写相应的方法、添加新的属性。 这显的有点多余,但这其实是面向对象的思想。
frame = function(name, arr, b, e, i) { model.call(this, name); this.v = arr; this.frames = this.v.length; //帧 this.s = b || {}; // this.C = e || -1; this.z = i || -1 }, x = function() {}; x.prototype = model.prototype; frame.F = model.prototype; frame.prototype = new x; frame.prototype.start = function(a) { .... }; frame.prototype.animate = function() { .... };
然后再加个真正播放动画的函数,就基本搞定了。为什么要单独写个动画函数呢?实际上动画的原理就是通过不停的变换div的背景图片显示位置来实现的,而在Javascript中,最好是通过setTimeout来实现,且setTimeout最好还不要带参数,所以本函数会循环globle变量检查谁正在播放,如果正在播放则加一帧。
playAnimate = function() { if (google.doodle.isInit) { for (var a in allModels) { var f = allModels[a]; f && f.isPlaying() && f.animate() } //播放370次后暂停 if (++counter < 370) google.doodle.timeout = window.setTimeout(playAnimate, 84); else { google.doodle.isInit = boolNo; openMouseEvent() } } },
代码中也使用了大量的 && 和 || ,这些完全可以换成if,但前台代码能省则省,所以Javascript可以多用这些,不推荐后台代码使用,不易读!
最后效果和google应该说基本没差别,当然只是自已觉得!
演示地址:http://longzuyuan.cn/doodle/clokey/index.htm (有时网速有点慢,请耐心,小绿人岗比图片大一点,有时可能加载不出来,可下载看。不太清楚怎么把效果加到博客正文,知道的还望分享一下。)
下载地址:http://longzuyuan.cn/doodle/download/clokey.zip
0 0
- Google粘土动画纯Javascript代码实现
- 纯代码实现水平loading动画
- JavaScript实现动画计时器代码!!!
- iOS动画纯代码
- 纯CSS3实现动画不规则的tab标签切换代码
- android纯代码圆周动画
- 纯原生javascript实现图片轮播切换效果代码。
- 利用CSS和javascript实现Google首页的动画效果
- 纯JavaScript实现Ajax
- 纯CSS实现倒计时动画
- 纯CSS实现倒计时动画
- 纯css实现回旋动画
- 纯CSS实现小车动画
- 纯代码实现TabHost
- 纯代码实现 AutoLayout
- 纯代码实现AutoLayout
- 纯代码实现dialog
- 仿GOOGLE的Javascript动画
- 图像处理之滤波器(二)(转)
- iOS: MVC
- http通信过程简介
- C++实现开机启动
- 打印系统日志
- Google粘土动画纯Javascript代码实现
- timestamp和date及datetime的区别
- 数据库未来的5大预测
- Linux下select()函数的用法(转)
- C# Serializable
- 选项卡TabHost的使用
- ORACLE内存与进程
- [二分]发年终奖啦
- 在邮件中自动播放flash