Arkansas-based Acumen Brands operates a portfolio of ecommerce sites in a diverse array of industries. Our talented group of young minds continues to generate amazing growth by innovating, iterating and having a healthy dose of data fanaticism.

How to Animate The Martha Graham Dancing Google Logo for Yourself (Tutorial)

Posted on 12 May 2011 in Almost How-To, Featured Posts | 3 comments


Challenge accepted!

Yesterday, the Google gurus created one of the coolest Google Doodle logo animations yet, as an homage to American dancer/choreographer Martha Graham. I blogged about how Google animated their logo, and a very intriguing comment popped up. Facebook user Maja Malovrh asked “Is there any way of seeing the animation again?”  Given our dedication to cool animation and dance clothes, we said:

Challenge accepted!

Honestly, I’m barely writing any original code, here. I’m standing on the shoulders of the Google giants, so huge thanks to them for making their code so simple and easy to read. With that said, here’s how to do it.

First, create a 1×1 <img> tag to cache the logo image file, like so:
<img src="http://graphics.acumenholdings.com/2011/05/graham11-hp-sprite-1.png" alt="" width="1" height="1" />

Next, you’ll need to create a <div> with an id “hplogo” and style it and its children for the animation magic to take place. Why? Because that’s what Google did.

<style type="text/css">
#hplogo {position:relative; width:600px; height: 150px;}
#hplogo div {position:absolute;}
</style>

Lastly, use this script I modified only slightly to see it animated.

<script type="text/javascript">
var google={nav:{go:false},ml:function(){}}
</script>
<script type="text/javascript">
(function(){try{if(!google.doodle)google.doodle={};var d=[[307,48,88,89],[307,48,89,89],[307,48,91,89],[305,49,93,89],[305,50,93,88],[305,50,93,88],[306,52,92,86],[305,53,93,84],[305,54,94,83],[306,54,93,83],[307,54,92,83],[307,54,92,83],[308,54,90,83],[308,54,90,83],[306,53,91,84],[306,53,91,84],[308,53,90,84],[308,53,90,84],[305,53,92,84],[305,52,92,85],[306,52,91,85],[308,51,88,87,1],[308,50,88,88],[308,49,88,88],[307,49,89,88],[307,50,89,87],[308,51,89,86],[307,54,90,83],[307,57,90,80],[306,58,92,79],[306,58,92,79],[305,60,92,77],[302,61,95,76],[302,63,95,74],[302,51,96,86],[302,66,98,71],[304,67,96,69],[301,63,96,74],[301,58,93,79],[291,52,94,85],[288,50,71,88],[285,43,76,95],[285,37,70,101],[281,29,55,109],[278,20,58,119],[278,20,55,119,1],[277,12,121,127],[271,2,122,138],[267,1,126,139],[264,0,136,140],[260,0,141,140],[255,0,148,140],[252,0,151,140],[249,2,121,138],[247,3,123,137],[246,3,123,137],[246,2,124,137],[258,2,112,137],[263,2,106,137],[263,2,106,137],[262,2,103,137],[260,2,104,136],[260,2,104,137,1],[268,2,98,137],[267,2,99,137],[266,2,97,137],[266,3,96,136],[264,3,99,136],[263,3,100,136],[261,3,100,136],[259,2,138,137],[254,2,126,137],[247,2,101,136],[240,2,108,136],[238,1,110,137],[230,1,118,138],[220,15,128,124],[211,18,137,121],[205,43,102,96],[202,45,104,93],[200,38,97,101],[198,38,104,101,1],[197,39,107,100],[197,39,112,100],[213,39,94,110],[212,40,95,111],[211,41,97,111],[209,42,99,112],[209,43,98,112],[213,43,87,112],[213,42,83,113],[211,40,86,109],[211,38,86,103],[211,37,88,112],[211,20,186,131],[213,27,167,122],[212,44,87,105],[210,44,88,98],[195,44,106,98],[189,44,110,98],[182,46,117,99],[173,44,118,96,1],[161,43,130,99],[154,42,137,97],[153,42,137,97],[153,42,137,97],[152,41,137,98],[151,41,137,97],[149,41,145,97],[148,25,144,114],[148,13,144,126],[141,12,153,127],[115,11,173,128],[108,7,180,133],[108,4,180,136],[108,3,176,137,1],[108,1,161,139],[105,1,235,138],[103,1,295,148],[103,0,277,149],[108,0,234,137],[101,0,232,137],[99,0,135,139],[95,0,244,139],[81,0,152,139],[69,0,164,139,1],[66,0,169,139],[65,0,170,139],[63,0,168,138],[61,0,159,138],[35,0,304,139],[19,0,189,140],[18,11,138,129],[18,11,137,129],[18,11,137,128],[18,6,135,133],[7,4,146,136],[6,4,147,136],[3,4,150,136,1],[3,5,150,135],[3,8,150,132],[4,6,394,145],[12,6,388,145],[11,8,389,144],[11,8,387,144],[11,8,387,143,1],[10,8,113,131],[11,8,111,131],[10,9,112,130],[12,9,116,130],[12,9,111,130],[12,9,111,130],[12,9,110,131],[12,34,113,106],[13,35,110,104]],e=d.length,f,g,h,i,j=-1,k=function(){google.nav&&google.nav.go?google.nav.go("http://www.google.com/search?q=Martha+Graham&ct=graham11-hp&oi=ddle"):window.location.href="http://www.google.com/search?q=Martha+Graham&ct=graham11-hp&oi=ddle"},l=function(){var a=d[f],c=document.getElementById("hplogo");if(c&&a[0]){var b=document.createElement("div");b.id="hplogo"+f;b.style.left=a[0]+"px";b.style.top=a[1]+"px";b.style.width=a[2]+"px";b.style.height=a[3]+"px";b.style.background="url(http://www.google.com/logos/2011/graham11-hp-sprite.png) no-repeat "+-g+"px "+-h+"px";b.onmousedown=k;a[3]>i&&(i=a[3]);a[4]?(g=0,h+=i,i=0):g+=a[2];c.appendChild(b);++f;f< e&&(j=window.setTimeout(l,83))}},m=function(){google.doodle.a=!1;i=h=g=f=0;j!=-1&&(window.clearTimeout(j),j=-1);for(var a=0;a< e;++a){var c=document.getElementById("hplogo"+a);c&&c.parentNode&&c.parentNode.removeChild(c)}j=window.setTimeout(l,83)};if(!google.doodle.a){google.doodle.a=!0;var n=document.createElement("img");n.addEventListener?n.addEventListener("load",m,!1):n.attachEvent("onload",m);n.src="http://www.google.com/logos/2011/graham11-hp-sprite.png"}}catch(o){google.ml(o,!1,{cause:"DOODLE"})};})();
</script>

That’s it! Save and view dancing scripty beauty. Bear in mind that the above depends entirely on Google continuing to host the Martha Graham dance doodle, but odds are pretty darn good that they’ll continue to do that until the Internet dies. This animation script will also only ever work for this particular animation, because it’s made up of carefully-crafted frame coordinates. In other words the javaScript is just as much a part of the final animation as the image, itself, and together they create art — separately, they’re simply spare parts.

Happy copy-pasting!


EDIT: My apologies to everyone who copied and pasted my bugged line of JS. The script is fixed now, thanks to the first comment from Shanfan Huang. Happy-ER copy-pasting ;)

3 comments

Trackbacks/Pingbacks