Google首页现代舞先驱玛莎·葛兰姆JS代码分析(附源码下载)

  2011年5月11日,GOOGLE为了纪念现代舞先驱玛莎·葛兰姆 117 周年诞辰,用巧妙的技术和奇特的创意在首页创建了一副跳舞的图,我把整个源码下载下来并加以分析和重构,效果图如下:

整个动画实际上是由155张小图片做出来的(GOOGLE的设计师太NB了),就像放电影那样,如下图:

虽然原理很简单,就是用JS来控制播放上面的图片,不过里面还有很多技巧是值得学习的,下面是我对代码的分析。

HTML部分很简单,就一个div容器:


  1. <div id="hplogo"> 
  2.     <a href="#"> 
  3.         <img title="现代舞先驱玛莎·葛兰姆 117 周年诞辰" border="0" alt="现代舞先驱玛莎·葛兰姆 117 周年诞辰" src="images/graham11-hp-start.png" /> 
  4.     </a> 
  5. </div> 

CSS部分:


  1. #hplogo { position: relative; cursor: pointer; width: 403px; height: 156px; margin: 120px auto 0 auto; background: #fff none repeat 0% 0% scroll; }  
  2. #hplogo div { position: absolute; } 

JS部分(完整代码在附件中):


  1. (function() {  
  2.             try {  
  3.                 //二维数组定义155张图片的信息,分别是[图片的left, top, width, height, 1(标记,部分数组有)]  
  4.                 //数组中最后一个值“1”是一个标记,表示图片换行  
  5.                 var arrImg = [[307, 48, 88, 89], [307, 48, 89, 89], [307, 48, 91, 89]...(省略N个数组)],  
  6.                 imgLen = arrImg.length, //图片数组长度  
  7.                 imgIndex, imgLeft, imgTop, maxHeight,   //分别代表 当前图片序号,background-position中的left, top,一行图片中的最大高度  
  8.                 fun = -1,   //后面setTimeout的返回值,做标记,后面用到  
  9.                 funImgClick = function() {  //点击图片的事件(跳转到GOOGLE搜索页面)  
  10.                     google.nav && google.nav.go ?  
  11.                     google.nav.go("/search?q=%E7%8E%9B%E8%8E%8E%C2%B7%E8%91%9B%E5%85%B0%E5%A7%86&ct=graham11-hp&oi=ddle&hl=zh-CN") :  
  12.                     window.location.href = "/search?q=%E7%8E%9B%E8%8E%8E%C2%B7%E8%91%9B%E5%85%B0%E5%A7%86&ct=graham11-hp&oi=ddle&hl=zh-CN" 
  13.                 },  
  14.                 funMakeAnimate = function() {   //创建并执行动画的方法,每83毫秒调用一次,创建一个DIV并设置属性、背景图  
  15.                     //取出当前图片信息  
  16.                     var img = arrImg[imgIndex],  
  17.                     //所有DIV都添加到这个容器  
  18.                     wrap = document.getElementById("hplogo");  
  19.                     if (wrap && img[0]) {  
  20.                         //开始创建DIV  
  21.                         var div = document.createElement("div");  
  22.                         div.id = "hplogo" + imgIndex;  
  23.                         div.style.left = img[0] + "px";  
  24.                         div.style.top = img[1] + "px";  
  25.                         div.style.width = img[2] + "px";  
  26.                         div.style.height = img[3] + "px";  
  27.                         div.style.background = "url(images/graham11-hp-sprite.png) no-repeat " + -imgLeft + "px " + -imgTop + "px";  
  28.                         div.  
  29.                         //这里使用了利用&&运算符的技巧,下面还会用到这个技巧  
  30.                         //相当于"if (img[3] > maxHeight) { maxHeight = img[3]; }"  
  31.                         img[3] > maxHeight && (maxHeight = img[3]); //保证maxHeight取当前行最大的图片高度  
  32.                         //如果有5个值,则说明换行了,left重新从0开始,并累加top,行最大高度清0  
  33.                         //否则left累加当前图片的宽度  
  34.                         img[4] ? (imgLeft = 0, imgTop += maxHeight, maxHeight = 0) : imgLeft += img[2];  
  35.                         wrap.appendChild(div);  
  36.                         ++imgIndex;  
  37.                         //继续动画  
  38.                         imgIndex < imgLen && (fun = window.setTimeout(funMakeAnimate, 83)); //又是 && ,同上  
  39.                     }  
  40.                 },  
  41.                 funInit = function() {  //页面加载的时候就执行该函数,初始化变量并调用动画函数  
  42.                     maxHeight = imgTop = imgLeft = imgIndex = 0;  
  43.                     //如果动画已经在播放,则先停止并删掉相应的DIV节点  
  44.                     //再次出现 && 的使用  
  45.                     fun != -1 && (window.clearTimeout(fun), fun = -1);  
  46.                     //删除已经添加的DOM节点  
  47.                     for (var index = 0; index < imgLen; ++index) {  
  48.                         var div = document.getElementById("hplogo" + index);  
  49.                         div && div.parentNode && div.parentNode.removeChild(div);  
  50.                     }  
  51.                     //第一次调用动画函数  
  52.                     fun = window.setTimeout(funMakeAnimate, 83);  
  53.                 };  
  54.  
  55.                 var originImg = document.createElement("img");  
  56.                 //页面  
  57.                 originImg.addEventListener ?  
  58.                     originImg.addEventListener("load", funInit, false) : //addEventListener用于Mozilla系列浏览器,第三个参数userCapture若为true,则浏览器采用Capture,若为false则采用bubbing方式  
  59.                     originImg.attachEvent("onload", funInit);   //用于IE浏览器  
  60.                 originImg.src = "images/graham11-hp-sprite.png";  
  61.             }  
  62.             catch (o) {  
  63.                 //GOOGLE的错误处理  
  64.                 //google.ml(o, !1, { cause: "DOODLE" });  
  65.             }  
  66.         })() 

 

源码下载:点我下载

时间: 2024-10-21 15:04:01

Google首页现代舞先驱玛莎&#183;葛兰姆JS代码分析(附源码下载)的相关文章

avalon js实现仿google plus图片多张拖动排序附源码下载_javascript技巧

源码下载:http://xiazai.jb51.net/201509/yuanma/drag_sort1(jb51.net).rar 效果展示如下: google plus     拖动+响应式效果:   要求 1. 两边对齐布局,即图片间间距一致,但左右两边的图片与边界的间距不一定等于图片间间距,兼容ie7,8,firefox,chrome. 2. 浏览器尺寸变化,在大于一定尺寸时,每行自动增加或减少图片,自动调整图片间间距,以满足两边对齐布局,这时每张图片尺寸固定(这里是200*200px)

Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果(附demo源码下载)_实用技巧

本文实例讲述了Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果的方法.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text; using System.IO; public partial

通过SketchRNN、PCA和t-SNE从Google QuickDraw数据集中显示矢量图的潜在空间|附源码

首发地址:https://yq.aliyun.com/articles/98593 更多深度文章,请关注:https://yq.aliyun.com/cloud 本文是作者最近发布的Google QuickDraw数据集一系列笔记中的第三部分,使用的最近发布的SketchRNN模型.下面介绍QuickDraw数据集及SketchRNN模型.        QuickDraw数据集是由世界各地1500多万人参与的"快速绘画" AI实验后收集数百万幅图画建成,要求参与者在20秒内绘制出属于

google 收录查询与pr 查询 php源码下载

function google() {  //在同时间过于频繁地扫描Google搜索结果,GG会屏蔽该IP.因此冰河在此暂时去掉了此功能  //诸位网友如果想开放此功能可以,可将下面这一行加上注释即可,谢谢!  echo "0"; return "";  global $murl,$furl;  $url = "http://www.google.cn/search?hl=zh-CN&q=site:$furl";  $page = fil

JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码_javascript技巧

JavaScript实现仿新浪微博大厅和未登录腾讯微博首页滚动效果,貌似这些天有不少朋友需要这功能,前几天已经发了几个了,不过那一个效果是用jquery实现的<jQuery向上循环滚动(仿新浪微博未登录首页滚动微博显示)>,今天发现这款是js制作的好,不敢独享,希望需要的朋友喜欢哦. 效果图展示如下: 查看演示         源码下载 html代码 <div class="wp"> <ul id="slider" class=&quo

用DIV CSS网页布局之Google首页实现

css|google|网页 今天我们来学习用 Web 标准的方法来制作 Google 首页(中文).Google 首页一直是用 table 布局的.我们把 Google 首页用 PrtScr 截屏,作为制作时的设计稿参考,并且不打开 Google 首页查看其源代码--就当它不存在.这样和真实项目工作比较接近. 第一部分.HTML 的构建(基于XHTML Transitional) 从设计稿上看到的内容,去揣摩结构.因为整个页面内容较少,容易理解,但也碰到了我们的第一个问题:是用 <p> 标签还

jQuery实现仿Google首页拖动效果的方法_jquery

本文实例讲述了jQuery实现仿Google首页拖动效果的方法.分享给大家供大家参考.具体如下: 这里用jQuery.js库写了一个仿Google首页拖动的特效代码 <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>用JQUERY实现的仿Googl

Google首页的一个细微变化

最近发现Google首页左上角那些功能链接都加上了下划线,即便是More点出来的下拉菜单也不例外. 下面用图说话: 但是其他应用中的链接仍然保持了原来的摸样,并没有下划线. 由此可见,虽然已经过了这么多年,我们通过各种技术手段可以对超链接进行各种形式的美化,但是带下划线的文字仍然是最常见.也让用户最容易理解的形式.我觉得这就像筷子,只要有华人的地方,就会有筷子的存在.而只要是有互联网的地方,就一定会有下划线的存在.

[源码]google首页图标JS动画

     今天看到群里的人提到过的,GOOGLE首页下的那个图标的动画,记得以前自己提取过源码的,发上来以做备份.     点击下载