Google粘土动画纯Javascript代码实现
美国粘土动画大师诞辰90周年之际,Google的Doodle换成了一组粘土动画,效果逼人:
纯HTML/CSS/Javascript实现,Google的工程师技术水平让大家眼红啊。于是一大批程序员开始依样画葫芦,自己动手实现该效果。
从网上下载看了一些,觉得和Google原版的都多少有一些差异,于是我也手痒,小COPY了一下:
首先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>
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()}}},
Google粘土动画纯Javascript代码实现相关推荐
- 纯javascript代码编写计算器程序
今天来分享一下用纯javascript代码编写的一个计算器程序,很多行业都能用到这个程序,例如做装修预算.贷款利率等等. 首先来看一下完成后的效果: 具体代码如下:(关注我的博客,及时获取最新WEB前 ...
- 如何用 200 行 JavaScript 代码实现人脸检测?
在超市.地铁.车站等很多场景中,人脸识别已经被广泛应用,但是这个功能究竟是怎么实现的? 在本文中,将以 pico.js 库为例,分享实现轻量级人脸识别功能的具体开发过程 . 作者 | tehnokv ...
- 精心收集的95个超实用的JavaScript代码片段(ES6 +编写)
Array 数组 Array concatenation (数组拼接) 使用Array.concat(),通过在args中附加任何副本和/或值来拆分一个数组. JavaScript代码: const ...
- [css] 使用纯CSS代码实现动画的暂停与播放
[css] 使用纯CSS代码实现动画的暂停与播放 一个属性:animation-play-state 取值:paused(暂停)|running(播放) hover取代点击 .stop:hover~. ...
- css元素发光效果图,纯CSS3实现圆圈动态发光特效动画的示例代码
本文主要介绍了纯CSS3实现圆圈动态发光特效动画的示例代码,分享给大家,具体如下: 效果图: 代码: 纯CSS3实现圆圈动态发光特效动画 body { background-color: #00000 ...
- JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
网上搜索了,目前主流的Js代码压缩工具主要有Uglify.YUI Compressor.Google Closure Compiler,简单试用了UglifyJS 和Google Closure Co ...
- 图解 Google V8 # 01:V8 是如何执行一段 JavaScript 代码的?
说明 图解 Google V8 学习笔记 JavaScript 的设计思想 JavaScript 借鉴了很多语言的特性: C 语言的基本语法 Java 的类型系统和内存管理 Scheme 的函数作为一 ...
- Google Doodle粘土动画
Google Doodle粘土动画,这是Google Doodle设计的Logo图标,该动画是为了纪念粘土大师而设计的,该动画是利用一张图片实现的,通过播放图片中不同的帧来实现这个动画. 统一开发环境 ...
- 解读Google Analytics(分析)客户端javascript代码
/** * 代码翻译:周培公 * 电子邮件:peigong@foxmail.com * 腾讯微博:http://t.qq.com/lanxmail * 新浪微博:http://weibo.com/17 ...
最新文章
- EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证...
- 【转】×××精确校验JS
- 关于WriteFile函数的lpNumberOfBytesWritten在Win8开始的不同
- linux用户取消密码,[Linux]linux下取消用户名和密码直接登录
- SQL条件!=null查不出数据
- FineReport性能调优的一些办法
- layUI数据表格(table)
- Java基础:把对象作为参数
- [图文详解]图像处理中的高斯模糊
- Windows网络编程获得本机IP地址
- JS逻辑运算符的与,或,非
- 2021年中国粮食行业发展现状分析,粮食播种面积、产量再度迎来上涨「图」
- 头腾大战,用户的头像到底属于谁的?
- Win10笔记本开热点供移动端连接后电脑无法连网
- leetcode刷题之 剑指offe 面试题05. 替换空格 犯傻记录
- Python数据处理实例
- Codeforces 940E: Cashback 单调队列优化DP
- Unity Shader入门精要学习笔记 - 第14章非真实感渲染
- 达思SQL数据库修复软件1.7(支持碎片重组、支持勒索病毒加密的sql数据库修复软件)...
- 马云:我说了很久的DT时代,你们明白了吗?
热门文章
- PPT:RGV应用技术详解
- 《Introduction to Linux》——Linux Fundation (15~18/18章)
- 后缀数组模板及代码详解
- 【已解决】Could NOT find CUDA: Found unsuitable version “10.1”, but required is exact version “11.2”
- gitbook中book.json文件详解
- 浮点数的表示范围 规格化和非规格化
- Java IO 之 FileReader 读取文件打印在控制台(处理汉字乱码bug)
- helm chart
- 自媒体平台多平台分发好吗?有什么方法?
- 音频处理与压缩的一些技术点和算法