<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Devirtuoso &#187; How to</title>
	<atom:link href="http://www.devirtuoso.com/category/how-to/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.devirtuoso.com</link>
	<description>Web Development Wickedness</description>
	<lastBuildDate>Sat, 20 Mar 2010 16:35:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>3D Sphere Using jQuery</title>
		<link>http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/</link>
		<comments>http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 17:53:35 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1166</guid>
		<description><![CDATA[Ever wanted your tag cloud to resemble a ball?&#160; Of course you did.&#160; This tutorial will walk you through how to create a Sphere in jQuery.

&#160;
What We Are Building
This one can bog down a system in a hurry, but that’s the fun with experimenting with JavaScript.&#160; We will be building a sphere that rotates depending [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wanted your tag cloud to resemble a ball?&#160; Of course you did.&#160; This tutorial will walk you through how to create a Sphere in jQuery.</p>
<p><span id="more-1166"></span></p>
<p>&#160;</p>
<h2>What We Are Building</h2>
<p>This one can bog down a system in a hurry, but that’s the fun with experimenting with JavaScript.&#160; We will be building a sphere that rotates depending on which way the mouse moves….exciting.</p>
<div class="resources">
	 <a href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.html"class="Example" target="_blank">Example</a>
</div>
<p><a title="3d sphere" href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.html" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="sphere" border="0" alt="sphere" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image38.png" width="419" height="420" /></a> </p>
<p>&#160;</p>
<h2>Getting Started</h2>
<p>This tutorial is a continuation of a line of 3D jQuery posts.&#160; I would recommend you having a look at the previous post so you’re up to speed.</p>
<ul>
<li><a title="Making a 3D Engine in jQuery" href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">Making a 3D Engine in jQuery</a> </li>
<li><a title="3D Plane for jQuery Engine" href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank">3D Plane for jQuery Engine</a> </li>
<li><a title="Creating a Wobbling 3D Carousel" href="http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/" target="_blank">Creating a Wobbling 3D Carousel</a> </li>
</ul>
<p>Now that is out of the way lets get started.&#160; For this project we’ll have 3 files.&#160; </p>
<ul>
<li>3DEngine.js</li>
<li>Sphere.js</li>
<li>sphere.html</li>
</ul>
<p>The 3DEngine.js is the same file that was in the previous posts so we won’t be covering that. The Sphere.js holds the Sphere class which is used by the 3D Engine.&#160; Lastly the html file puts everything together.</p>
<p>&#160;</p>
<h2>The Sphere</h2>
<p>With the sphere class we’ll be creating a set of 3d points (x,y,z) in an array.&#160; To build the sphere we’re simply going to create a whole bunch of rings that start off small, get larger, then small again.&#160; I’m not sure if this the best way of building a sphere, but it works so I’m not going to worry too much.</p>
<p>Here is the <strong>JavaScript</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Sphere <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>radius<span class="sy0">,</span>sides<span class="sy0">,</span> numOfItems<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Step through the number of rings.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> j <span class="sy0">=</span> sides <span class="sy0">;</span> j <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> j<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Step through each point on a ring.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> numOfItems <span class="sy0">/</span> sides<span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Space out each point evenly.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle <span class="sy0">=</span> i <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> <span class="br0">&#40;</span>numOfItems<span class="sy0">/</span>sides<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angleB <span class="sy0">=</span> j <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> sides<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Figure out the x,y,z co-ordinates of each point.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> x <span class="sy0">=</span> &nbsp; Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span>radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y <span class="sy0">=</span> &nbsp;Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span>radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> z <span class="sy0">=</span> &nbsp;Math.<span class="me1">cos</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Put the point in an array.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Need to extend class to work in 3d engine.</span><br />
Sphere.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>There are two loops.&#160; One for the number of rings, the other for the points within each ring.&#160; Inside the inner loop we first figure out where each point should lie, then figure out how that would translate into the x, y and z co-ordinates.</p>
<p>&#160;</p>
<h2>The jQuery / Html</h2>
<p>Not much has changed in our jQuery / HTML since the <a title="3d Plane" href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank">3d Plane</a> post.&#160; The only thing that has changed is we imported the Sphere.js and instead of adding a plane, we’re adding a sphere.</p>
<p>Here is the <strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Sphere.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Init Camera</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Create <span class="kw3">object</span> holder</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Add sphere to the <span class="kw3">object</span> holder</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Sphere<span class="br0">&#40;</span><span class="nu0">200</span>,<span class="nu0">10</span>,<span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Create scene</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Add <span class="kw3">object</span> holder to the scene</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var mouseX,mouseY <span class="sy0">=</span> <span class="nu0">0</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.left;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.top;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var speed <span class="sy0">=</span> <span class="nu0">6000</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Figure out where the mouse is when the mouse is moved.</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="br0">&#41;</span>.mousemove<span class="br0">&#40;</span>function<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseX <span class="sy0">=</span> e.clientX - offsetX - <span class="br0">&#40;</span>container.<span class="kw3">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseY <span class="sy0">=</span> e.clientY - offsetY - <span class="br0">&#40;</span>container.<span class="kw3">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>rotate the sphere along the y <span class="kw3">axis</span> when the mouse</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>mouse is moved left and right</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseX !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>rotate along the x <span class="kw3">axis</span> when the mouse is moved</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>up and down.</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseY !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x -<span class="sy0">=</span> mouseY <span class="sy0">/</span> speed;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Render the scene.</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Disclaimer</h2>
<p>Be careful adding points on this one.&#160; Because the 3D engine doesn’t use html’s canvas just yet, it really can’t handle too many points. I can get away with 100 points on my machine without too much delay.&#160; Chrome handles it the best out of all the browsers I tried.&#160; So use it at your own discretion, you might have some angry viewers if you go too nuts.&#160; This is just meant to be experimental…and cool.</p>
<p>The next step will be to optimize the 3D Engine a bit using the canvas so there won’t be this problem in the future.</p>
<p>&#160;</p>
<p>Here is all the code together:</p>
<p><strong>JavaScript</strong></p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Sphere <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>radius<span class="sy0">,</span>sides<span class="sy0">,</span> numOfItems<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> j <span class="sy0">=</span> sides <span class="sy0">;</span> j <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> j<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> numOfItems <span class="sy0">/</span> sides<span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle <span class="sy0">=</span> i <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> <span class="br0">&#40;</span>numOfItems<span class="sy0">/</span>sides<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angleB <span class="sy0">=</span> j <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> sides<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> x <span class="sy0">=</span> &nbsp; Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span>radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y <span class="sy0">=</span> &nbsp;Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span>radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> z <span class="sy0">=</span> &nbsp;Math.<span class="me1">cos</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Sphere.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p><strong>HTML</strong></p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>3d engine<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #item{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:300px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #69c;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-weight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size:2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Sphere.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Sphere<span class="br0">&#40;</span><span class="nu0">200</span>,<span class="nu0">10</span>,<span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var mouseX,mouseY <span class="sy0">=</span> <span class="nu0">0</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.left;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.top;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var speed <span class="sy0">=</span> <span class="nu0">6000</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="br0">&#41;</span>.mousemove<span class="br0">&#40;</span>function<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseX <span class="sy0">=</span> e.clientX - offsetX - <span class="br0">&#40;</span>container.<span class="kw3">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseY <span class="sy0">=</span> e.clientY - offsetY - <span class="br0">&#40;</span>container.<span class="kw3">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseX !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseY !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x -<span class="sy0">=</span> mouseY <span class="sy0">/</span> speed;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources">
	 <a href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.html"class="Example" target="_blank">Example</a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Creating a Wobbling 3D Carousel</title>
		<link>http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/</link>
		<comments>http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 07:07:33 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[carousel]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1151</guid>
		<description><![CDATA[We’ve all seen a carousel in one form or another.&#160; This post will show how to create a carousel with a wobbling effect, much like an unbalanced wheel.

&#160;
What We’re Building
We’ll be creating a carousel with the help of the 3d Engine we built in a previous post.&#160; The idea is we’ll create a ring by [...]]]></description>
			<content:encoded><![CDATA[<p>We’ve all seen a carousel in one form or another.&#160; This post will show how to create a carousel with a wobbling effect, much like an unbalanced wheel.</p>
<p><span id="more-1151"></span></p>
<p>&#160;</p>
<h2>What We’re Building</h2>
<p>We’ll be creating a carousel with the help of the <a title="3d engine jquery" href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">3d Engine</a> we built in a previous post.&#160; The idea is we’ll create a ring by plotting points in 3d space, then we’ll rotate it so it’s almost perpendicular to the viewer.&#160; Because it’s not 100% flat, it will look like it’s wobbling up and down, giving your carousel a little more flavor.</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.zip" class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.html"class="Example" target="_blank">Example</a></div>
<p><a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.html" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="carousel" border="0" alt="carousel" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image37.png" width="445" height="146" /></a></p>
<p>&#160;</p>
<h2>Building the Ring</h2>
<p>If you haven’t read up on the  <a href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">3d Engine</a> just yet I recommend you do so.&#160; Creating objects for the engine isn’t overly complicated.&#160; It’s just an array of 3d points.&#160; With the ring, we’re going to use math to plot the points for us.&#160; We’re going to be creating a circle and plot it in 3d space.</p>
<p>Here is the <strong>JavaScript</strong>: (Ring.js)</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Ring <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>radius<span class="sy0">,</span> numOfItems<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="co1">//Step through each point on ring.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> numOfItems <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Figure out where each point lies on the circle</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle <span class="sy0">=</span> i <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> numOfItems<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Translate that point on the circle into x,y coordinates.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> x <span class="sy0">=</span> &nbsp;Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> z <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Add the point to the array.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//You need to inherit the DisplayObject3D.</span><br />
Ring.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>The Ring class takes 2 parameters, the first is the radius of the ring, and the second is how many items are going to be on the ring.</p>
<p>We then proceed to step through all the points, and place them at equal distances around the ring.</p>
<p>&#160;</p>
<h2>The HTML </h2>
<p>There isn’t much too the html.&#160; We’re simply going to create a &lt;ul&gt; with a bunch of words in it.</p>
<p>Here is the <strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>website<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>jQuery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>JavaScript<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>HTML<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>PHP<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>3D<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Ajax<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>CSS<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Design<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Flash<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Experimental<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Development<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>web<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Tutorial<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>ASP<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>&#160;</p>
<h2>The jQuery</h2>
<p>There is not much changed from our previous post on <a title="how to create a 3d plane for jQuery 3D Engine" href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank">how to create a 3d plane for jQuery 3D Engine</a>.&#160; The only difference here is we’re going to give an initial value to the axisRotation x value.&#160; This will rotate the ring towards the viewer.&#160; Through trial and error I figured out the value that worked for me.</p>
<p>Then we’ll animate the axisRotation y value when the mouse moves left and right.</p>
<p>Here is the <strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<br />
<span class="co1">//setup camera.</span><br />
<span class="kw2">var</span> camera <span class="sy0">=</span> <span class="kw2">new</span> Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
camera.<span class="me1">init</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">300</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">var</span> container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Setup 3d object holder.</span><br />
<span class="kw2">var</span> <span class="kw1">item</span> <span class="sy0">=</span> <span class="kw2">new</span> Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Add ring to 3d object holder.</span><br />
<span class="co1">//The first argument for the ring is the radius.</span><br />
<span class="co1">//The second argument for the ring is how many items</span><br />
<span class="co1">//are on the ring. &nbsp;So we pass in how many items are in our list.</span><br />
<span class="kw1">item</span>.<span class="me1">addChild</span><span class="br0">&#40;</span><span class="kw2">new</span> Ring<span class="br0">&#40;</span><span class="nu0">200</span><span class="sy0">,</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item ul li&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Create a scene.</span><br />
<span class="kw2">var</span> scene <span class="sy0">=</span> <span class="kw2">new</span> Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Add 3d object holder to the scene.</span><br />
scene.<span class="me1">addToScene</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="kw2">var</span> mouseX<span class="sy0">,</span>mouseY <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="kw2">var</span> offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span><span class="sy0">;</span><br />
<span class="kw2">var</span> offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span><span class="sy0">;</span><br />
<span class="kw2">var</span> speed <span class="sy0">=</span> <span class="nu0">6000</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Capturing mouse movements.</span><br />
$<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">mousemove</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; mouseX <span class="sy0">=</span> e.<span class="me1">clientX</span> <span class="sy0">-</span> offsetX <span class="sy0">-</span> <span class="br0">&#40;</span>container.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; mouseY <span class="sy0">=</span> e.<span class="me1">clientY</span> <span class="sy0">-</span> offsetY <span class="sy0">-</span> <span class="br0">&#40;</span>container.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Rotate ring so it's almost perpendicular to the viewer.</span><br />
axisRotation.<span class="me1">x</span> <span class="sy0">=</span> <span class="nu0">1.5</span><span class="sy0">;</span><br />
<br />
<span class="kw2">var</span> animateIt <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mouseX <span class="sy0">!=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//When the user moves the mouse left and right,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//rotate around the ring on the y axis.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; axisRotation.<span class="me1">y</span> <span class="sy0">+=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; scene.<span class="me1">renderCamera</span><span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<br />
setInterval<span class="br0">&#40;</span>animateIt<span class="sy0">,</span> <span class="nu0">20</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Voila!</h2>
<p>That’s all there is too it.&#160; </p>
<p>Here is all the code together:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>3d engine<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; #item{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:300px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #69c;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-weight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size:1em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>website<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>jQuery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>JavaScript<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>HTML<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>PHP<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>3D<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Ajax<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>CSS<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Design<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Flash<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Experimental<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Development<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>web<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Tutorial<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>ASP<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Ring.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Ring<span class="br0">&#40;</span><span class="nu0">200</span>, $<span class="br0">&#40;</span><span class="st0">&quot;#item ul li&quot;</span><span class="br0">&#41;</span>.length<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var mouseX,mouseY <span class="sy0">=</span> <span class="nu0">0</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.left;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.top;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var speed <span class="sy0">=</span> <span class="nu0">6000</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="br0">&#41;</span>.mousemove<span class="br0">&#40;</span>function<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseX <span class="sy0">=</span> e.clientX - offsetX - <span class="br0">&#40;</span>container.<span class="kw3">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseY <span class="sy0">=</span> e.clientY - offsetY - <span class="br0">&#40;</span>container.<span class="kw3">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x <span class="sy0">=</span> <span class="nu0">1.5</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseX !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>Ring.js:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Ring <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>radius<span class="sy0">,</span> numOfItems<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> numOfItems <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle <span class="sy0">=</span> i <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> numOfItems<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> x <span class="sy0">=</span> &nbsp;Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> z <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Ring.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Just a small tip. If you wanted to create a carousel that doesn’t wobble, your first instinct might be to adjust the axisRotation x value until you get it.&#160; You can do it this way, it just might take a bit to get it right on the money.&#160; The easier way is to adjust the Ring.js file, and switch the y and z values.&#160; This will create a totally flat ring and you don’t have to worry about using the axisRotation x value to try and flatten it out.</p>
<p>&#160;</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.zip" class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.html"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>3D Plane for jQuery 3D Engine</title>
		<link>http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/</link>
		<comments>http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 18:11:23 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1142</guid>
		<description><![CDATA[In the last post we created a 3D Engine with jQuery.&#160; This time around we’re going to make a new shape and make it interact with the mouse.

&#160;
What We’re Making
I decided not to tackle too tough a shape as I wanted to show how to interact with the mouse.&#160; We’ll be making a plane that [...]]]></description>
			<content:encoded><![CDATA[<p>In the last post we created a <a title="3D Engine with jQuery" href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">3D Engine with jQuery</a>.&#160; This time around we’re going to make a new shape and make it interact with the mouse.</p>
<p><span id="more-1142"></span></p>
<p>&#160;</p>
<h2>What We’re Making</h2>
<p>I decided not to tackle too tough a shape as I wanted to show how to interact with the mouse.&#160; We’ll be making a plane that rotates the further you get from the center.</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/3D-Engine/plane.zip" class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/plane.html"class="Example" target="_blank">Example</a></div>
</p>
<p><a title="Plane 3D" href="http://www.devirtuoso.com/Examples/3D-Engine/plane.html" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="plane rotating" border="0" alt="plane rotating" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image33.png" width="370" height="370" /></a> </p>
<p>&#160;</p>
<h2>Getting Started</h2>
<p>If you haven’t seen how the 3D engine works I recommend visiting <a title="Making a 3D Engine in jQuery" href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">Making a 3D Engine in jQuery</a> and getting caught up.&#160; The first thing we’re going to tackle is the plane.&#160; We’re going to create a JavaScript file that we’ll import into our HTML file. The code isn’t too complicated.&#160; We’re creating an array of 3d points.&#160; </p>
<p>Lets look at the code.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Plane <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>size<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>size <span class="sy0">===</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; size <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Plane.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>It’s pretty much the same as the Cube in the previous post.&#160; The only difference is it’s less points.&#160; This would be a good opportunity to walk you through how each point is placed.&#160; The Plane class has 1 argument.&#160; The size of the Plane.&#160; We’ll use this size to plot our points.&#160; Let’s look at the first point. (-size,size,0)&#160; So if we pass in a size of 100, then the 3d point would be (-100,100,0) Which puts a point 100 points to the left and 100 up.&#160; The z value is at zero because it’s a plane.&#160; All the points are going to sit line up along the z axis.&#160; The next point is (100,100,0). This is the top right point.&#160; (100,-100,0) is bottom left. Lastly (-100,-100,0)&#160; is bottom right.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="points" border="0" alt="points" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image34.png" width="370" height="370" /> </p>
<p>&#160;</p>
<h2>Mouse Interaction</h2>
<p>Now that we have our plane made, we’ll just import it into our html file.&#160; Just like our previous post we’ll have to create our Camera,Object holder, Object and Scene. Now we’ll tackle having it interact with the mouse.</p>
<p>Here is the new jQuery:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">//Mouse x and y </span><br />
<span class="kw2">var</span> mouseX<span class="sy0">,</span>mouseY <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
<span class="co1">//x and y value of container</span><br />
<span class="kw2">var</span> offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span><span class="sy0">;</span><br />
<span class="kw2">var</span> offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span><span class="sy0">;</span><br />
<br />
<span class="co1">//rotation speed</span><br />
<span class="kw2">var</span> speed <span class="sy0">=</span> <span class="nu0">6000</span><span class="sy0">;</span><br />
<br />
<span class="co1">//when the mouse moves...</span><br />
$<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">mousemove</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Figure out how far it is from the center of the container</span><br />
&nbsp; &nbsp; mouseX <span class="sy0">=</span> e.<span class="me1">clientX</span> <span class="sy0">-</span> offsetX <span class="sy0">-</span> <span class="br0">&#40;</span>container.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; mouseY <span class="sy0">=</span> e.<span class="me1">clientY</span> <span class="sy0">-</span> offsetY <span class="sy0">-</span> <span class="br0">&#40;</span>container.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="kw2">var</span> animateIt <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Rotate along the y axis when the mouse is moved left and right</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mouseX <span class="sy0">!=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; axisRotation.<span class="me1">y</span> <span class="sy0">+=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Rotate along the x axis when the mouse moves up and down.</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mouseY <span class="sy0">!=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; axisRotation.<span class="me1">x</span> <span class="sy0">-=</span> mouseY <span class="sy0">/</span> speed<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Render the scene.</span><br />
&nbsp; &nbsp; scene.<span class="me1">renderCamera</span><span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//keep calling function every 20 milliseconds.</span><br />
setInterval<span class="br0">&#40;</span>animateIt<span class="sy0">,</span> <span class="nu0">20</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="code explained" border="0" alt="code explained" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image35.png" width="420" height="420" /> </p>
<p> Anytime the mouse moved we would figure out how far the mouse is from the center of the object.&#160; Then we assign it to variables that will be used in a function that is called at set intervals.&#160; In that function we simply divide the mouse value by a speed variable and apply it to the axisRotation.&#160; You can adjust the sensitivity of the mouse by increasing or decreasing the speed value.&#160; You might be wondering why we’re applying the mouseX to the y value of axisRotation.&#160; This is because we want to control rotating on the y axis with our mouse moving left and right.&#160; Kind of like opening and closing a door.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="axis" border="0" alt="axis" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image36.png" width="420" height="420" /> </p>
<p>&#160;</p>
<p>Here is the code all together:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>3d engine<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; #item{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:300px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #69c;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-weight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size:2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Plane.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span></span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Plane<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var mouseX,mouseY <span class="sy0">=</span> <span class="nu0">0</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; var offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.left;</span><br />
<span class="sc2">&nbsp; &nbsp; var offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.top;</span><br />
<span class="sc2">&nbsp; &nbsp; var speed <span class="sy0">=</span> <span class="nu0">6000</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="br0">&#41;</span>.mousemove<span class="br0">&#40;</span>function<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; mouseX <span class="sy0">=</span> e.clientX - offsetX - <span class="br0">&#40;</span>container.<span class="kw3">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; mouseY <span class="sy0">=</span> e.clientY - offsetY - <span class="br0">&#40;</span>container.<span class="kw3">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseX !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseY !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x -<span class="sy0">=</span> mouseY <span class="sy0">/</span> speed;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Next Step</h2>
<p>Now that the mouse Interaction is taken care of.&#160; The next shape I’m going to take a stab at is the ring.&#160; Stay tuned for more 3D shapes.</p>
<p>&#160;</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/3D-Engine/plane.zip" class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/plane.html"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>
<h3>Related</h3>
<p> <a href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">3D Engine</a><br />
  <a href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank"><img src="http://www.devirtuoso.com/wp-content/uploads/2009/09/3D-Engine.jpg" alt="" title="" width="100" height="100" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Grabbing Content from Other Pages with Ajax and jQuery</title>
		<link>http://www.devirtuoso.com/2009/09/grabbing-content-from-other-pages-with-ajax-and-jquery/</link>
		<comments>http://www.devirtuoso.com/2009/09/grabbing-content-from-other-pages-with-ajax-and-jquery/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 21:48:33 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1117</guid>
		<description><![CDATA[Sometimes it is useful to grab content from one of your other pages and use it on another.&#160; This tutorial will go over how to pull in the other content, and use selectors to get what you want.

What we’re building
Essentially we will be building two pages.&#160; One with static HTML.&#160; The other with jQuery to [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes it is useful to grab content from one of your other pages and use it on another.&#160; This tutorial will go over how to pull in the other content, and use selectors to get what you want.</p>
<p><span id="more-1117"></span></p>
<h2>What we’re building</h2>
<p>Essentially we will be building two pages.&#160; One with static HTML.&#160; The other with jQuery to steal the content from there and display it on it’s own page.&#160; Pretty cool stuff.&#160; It is just standard Ajax, but with one cool feature, it allows you to select what you pull from the site using selectors.&#160; If you haven’t used Ajax with jQuery before I recommend you checking out the <a title="Beginners Guide to Using Ajax with jQuery" href="http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/" target="_blank">Beginners Guide to Using Ajax with jQuery</a>. </p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/Ajax-jQuery-Remote/example.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/Ajax-jQuery-Remote/"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>
<h2>The HTML page</h2>
<p>First we’ll create a simple HTML page.&#160; I’m just going to use a header and an unordered list, just to show you can pick and choose what you want.</p>
<p>Here is the <strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Content Page<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;title&quot;</span>&gt;</span>This is a title<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Web<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>jQuery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Ajax<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>HTML<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Not much too it huh.&#160; This isn’t going to be the page that displays, so really you just have to make sure it has the content you want in here.</p>
<p>&#160;</p>
<h2>The jQuery / Ajax Page</h2>
<p>This page is pretty bare as well.&#160; We’re just going to have a div that will be are holder, and the jQuery to pull the content from the other page.</p>
<p>Here is the page:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Ajax and Jquery: Remote Pages<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $(document).ready(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#list').load(&quot;Content.html ul&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/h2.html"><span class="kw2">h2</span></a>&gt;</span>Here is the list from the other page:<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/h2.html"><span class="kw2">h2</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;list&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Basically the load() function does all the work. You pass in the url of the page, and the selector you want to get and it gets the HTML and puts it in the selector that is calling the load function.&#160; Just a note, you might run into some caching issues if you have dynamic content, so it might be a good idea to add some unique id at the end of the url; perhaps a random number that you generate.&#160; e.g. (htmlPage.html?cacheBuster=1231321)</p>
<p>&#160;</p>
<h2>Server Side Pages</h2>
<p>This also handles server side pages. e.g.(PHP, ASP, etc) The beauty of the load function is it has extra arguments you can pass in.&#160; It has 3 in total</p>
<ol>
<li>The page URL / selector</li>
<li>Any Post Data you want to pass to the URL</li>
<li>A Callback function.</li>
<p>So if you pass an object into the second parameter it will send a post variable with those values.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span><span class="st0">'#selector'</span><span class="br0">&#41;</span>.<span class="me1">load</span><span class="br0">&#40;</span><span class="st0">&quot;content.html #selector&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span>data<span class="sy0">:</span>value<span class="br0">&#125;</span><span class="sy0">,</span> <br />
&nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;Callback Function&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>For example, say we want to get the navigation from a certain page, and index.php loads the navigation based on what a certain post variable might be.&#160; This would be a prime example of when you might use the load function over other Ajax functions in jQuery.&#160; The ability to use a selector would help a great deal if you needed to pull a needle from a haystack of content.</p>
<h2>Conclusion</h2>
<p>More than likely this function isn’t going to be used everyday, but it’s good to keep in mind for those special occasions. </p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/Ajax-jQuery-Remote/example.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/Ajax-jQuery-Remote/"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/grabbing-content-from-other-pages-with-ajax-and-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Making a 3D Engine in jQuery</title>
		<link>http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/</link>
		<comments>http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 14:48:49 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1124</guid>
		<description><![CDATA[
	In the previous post &#8220;3D tag cloud&#8221; I received quite a few requests for different shapes besides the ring.
	The problem is how the tag cloud was created it doesn&#8217;t lend itself to different shapes very well. So
	this post will show how to create a 3D engine in jQuery / JavaScript for those more exciting shapes.


&#160;
What [...]]]></description>
			<content:encoded><![CDATA[<p>
	In the previous post &#8220;<a href="http://www.devirtuoso.com/2009/08/how-to-create-a-3d-tag-cloud-in-jquery/" target="_blank">3D tag cloud</a>&#8221; I received quite a few requests for different shapes besides the ring.<br />
	The problem is how the tag cloud was created it doesn&#8217;t lend itself to different shapes very well. So<br />
	this post will show how to create a 3D engine in jQuery / JavaScript for those more exciting shapes.
</p>
<p><span id="more-1124"></span></p>
<p>&#160;</p>
<h2>What We&#8217;re Building</h2>
<p>We&#8217;re going to create a 3D engine that will allow us to create shapes simply by creating an array of points. This engine will have a Camera, a Scene and an Object. It&#8217;ll work pretty well the same as in real life. The closer the camera is to the object the larger it gets. This won&#8217;t be a complete rendering engine, as this won&#8217;t render multiple objects at this point.</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/3D-Engine/example.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/3D-Engine/" target="_blank">Example</a></div>
<p>&#160;<a href="http://www.devirtuoso.com/Examples/3D-Engine/" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Cube" border="0" alt="cube 3d" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image_thumb1.png" width="431" height="449" /></a> </p>
<p>&#160;</p>
<h2>Display Object</h2>
<p>The Display Object is more or less a way to give each object a set of properties and methods. Say I wanted to create a cube, it would first have to inherit the DisplayObject3D class for it to work. It gives the object the tools it needs to get the job done. Kind of like a tool box for a handy man.</p>
<p>Here is the JavaScript Class:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> DisplayObject3D <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
DisplayObject3D.<span class="me1">prototype</span>._x <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
DisplayObject3D.<span class="me1">prototype</span>._y <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create 3d Points</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">make3DPoint</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> point <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">z</span> <span class="sy0">=</span> z<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> point<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create 2d Points</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">make2DPoint</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span> depth<span class="sy0">,</span> scaleFactor<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> point <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">depth</span> <span class="sy0">=</span> depth<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">scaleFactor</span> <span class="sy0">=</span> scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> point<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Holds the container</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">container</span> <span class="sy0">=</span> undefined<span class="sy0">;</span><br />
<br />
<span class="co1">//Holds an array of 3d points.</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">// Set the container and create place holders if </span><br />
<span class="co1">// there is no &lt;ul&gt; in the container</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">init</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> <span class="sy0">=</span> $<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">containerId</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//if there isn't a ul than it creates a list of +'s</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span>container<span class="sy0">+</span><span class="st0">&quot;:has(ul)&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span> <span class="sy0">===</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">'&lt;b id=&quot;item'</span><span class="sy0">+</span>i<span class="sy0">+</span><span class="st0">'&quot;&gt;+&lt;/b&gt;'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>If this seems a little foreign to you, you might want to check out the post <a title="Object Oriented Programming with JavaScript" href="http://www.devirtuoso.com/2009/09/object-oriented-programming-with-javascript/" target="_blank">Object Oriented Programming with JavaScript</a>.</p>
<h4>Make 3d/2d Points</h4>
<p>These functions basically create objects, one meant for 3d (x,y,z) and one meant for 2d(x,y,depth).&#160; These will come in handy when the scene is rendered.</p>
<h4>Initialization</h4>
<p>The init function assigns a variable to the container passed in.&#160; The container is where ever you want the 3d object to display.&#160; There is also a part of this function that checks to see if the container has an unordered list.&#160; If it doesn’t it just creates a bunch of +’s&#160; Really these lines aren’t necessary, I just put it in so I don’t always have to create a unordered list to see if my object is rendering.</p>
<p>&#160;</p>
<h2>Camera</h2>
<p>I’m guessing from the name you can probably figure out what this class does.&#160; It’s just like a real life camera.&#160; It basically creates a point of reference.</p>
<p>Here is the Camera Class:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Camera3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//The x,y,z of the camera</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">x</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">z</span> <span class="sy0">=</span> <span class="nu0">500</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Determines the zoom</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">focalLength</span> <span class="sy0">=</span> <span class="nu0">1000</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Figure out how large the object should be in</span><br />
<span class="co1">//reference to the camera.</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">scaleRatio</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">focalLength</span><span class="sy0">/</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">focalLength</span> <span class="sy0">+</span> <span class="kw1">item</span>.<span class="me1">z</span> <span class="sy0">-</span> <span class="kw1">this</span>.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Initialize the camera with values.</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">init</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="sy0">,</span>focalLength<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">z</span> <span class="sy0">=</span> z<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">focalLength</span> <span class="sy0">=</span> focalLength<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>The focal length basically determines how large the object is going to look in reference to how close it is from the camera.&#160; Think of it like a zoom lens.&#160; You can zoom in, or zoom out.</p>
<p>The scaleRatio does the magic. It figures out how large the item should be in reference to the camera.</p>
<p>&#160;</p>
<h2>Object 3D</h2>
<p>This class isn’t overly important.&#160; I basically made this class so I can add more than one object in the future.&#160; Right now the engine can only deal with one object at a time. Object3D is a glorified array.&#160; Anytime you add an item to the array, it runs the init function on that item. </p>
<p>Here is the code:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">// class creates an array of objects to</span><br />
<span class="co1">// be rendered, and initializes them.</span><br />
<span class="kw2">var</span> Object3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> <span class="sy0">=</span> $<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Object3D.<span class="me1">prototype</span>.<span class="me1">objects</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Add object to the list of objects.</span><br />
Object3D.<span class="me1">prototype</span>.<span class="me1">addChild</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>object3D<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">objects</span>.<span class="me1">push</span><span class="br0">&#40;</span>object3D<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; object3D.<span class="me1">init</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">container</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> object3D<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Scene</h2>
<p>This is where all the complicated stuff happens.&#160; I won’t get into great detail with the mathematics.&#160; High school math was boring enough <img src='http://www.devirtuoso.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> &#160; I will give you a high overview of what the code does though, so at least you have an understanding of what it does.</p>
<p>Here is the Scene Class:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Scene3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">sceneItems</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Adds objects to the list of items to be rendered.</span><br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">addToScene</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">sceneItems</span>.<span class="me1">push</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Converts a 3d point into a 2d point.</span><br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">Transform3DPointsTo2DPoints</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>points<span class="sy0">,</span> axisRotations<span class="sy0">,</span>camera<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> TransformedPointsArray <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sx <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">x</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cx <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">x</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sy <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">y</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cy <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">y</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sz <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cz <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="sy0">,</span> xy<span class="sy0">,</span>xz<span class="sy0">,</span> yx<span class="sy0">,</span>yz<span class="sy0">,</span> zx<span class="sy0">,</span>zy<span class="sy0">,</span> scaleFactor<span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">var</span> i <span class="sy0">=</span> points.<span class="me1">length</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>i<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">x</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">y</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">z</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around x</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xy <span class="sy0">=</span> cx<span class="sy0">*</span>y <span class="sy0">-</span> sx<span class="sy0">*</span>z<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xz <span class="sy0">=</span> sx<span class="sy0">*</span>y <span class="sy0">+</span> cx<span class="sy0">*</span>z<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around y</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; yz <span class="sy0">=</span> cy<span class="sy0">*</span>xz <span class="sy0">-</span> sy<span class="sy0">*</span>x<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; yx <span class="sy0">=</span> sy<span class="sy0">*</span>xz <span class="sy0">+</span> cy<span class="sy0">*</span>x<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around z</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; zx <span class="sy0">=</span> cz<span class="sy0">*</span>yx <span class="sy0">-</span> sz<span class="sy0">*</span>xy<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; zy <span class="sy0">=</span> sz<span class="sy0">*</span>yx <span class="sy0">+</span> cz<span class="sy0">*</span>xy<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; scaleFactor <span class="sy0">=</span> camera.<span class="me1">focalLength</span><span class="sy0">/</span><span class="br0">&#40;</span>camera.<span class="me1">focalLength</span> <span class="sy0">+</span> yz<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy0">=</span> zx<span class="sy0">*</span>scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy0">=</span> zy<span class="sy0">*</span>scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z <span class="sy0">=</span> yz<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> displayObject <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; TransformedPointsArray<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> displayObject.<span class="me1">make2DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="sy0">,</span> <span class="sy0">-</span>z<span class="sy0">,</span> scaleFactor<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> TransformedPointsArray<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Takes the converted 2d and applies the appropriate CSS.</span><br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">renderCamera</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="co1">// Loop through all objects in the scene.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> <span class="nu0">0</span> <span class="sy0">;</span> i<span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">sceneItems</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> obj <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">sceneItems</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">objects</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//transform the points in the object to 2d points.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> screenPoints <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">Transform3DPointsTo2DPoints</span><span class="br0">&#40;</span>obj.<span class="me1">pointsArray</span><span class="sy0">,</span> axisRotation<span class="sy0">,</span> camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//does the container have a ul inside of it.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> hasList <span class="sy0">=</span> <span class="br0">&#40;</span>document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;ul&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Cycle through each point in the object.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>k<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> k <span class="sy0">&lt;</span> obj.<span class="me1">pointsArray</span>.<span class="me1">length</span><span class="sy0">;</span> k<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> currItem <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//if the container has a list then select the lis</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>hasList<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;ul&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;li&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//otherwise select whatever is there.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;*&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//If there are items to render then...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>currItem<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem._x <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">x</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem._y <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">y</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">scale</span> <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">scaleFactor</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Render the CSS.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">position</span> <span class="sy0">=</span> <span class="st0">&quot;absolute&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">top</span> <span class="sy0">=</span> currItem._y<span class="sy0">+</span><span class="st0">'px'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">left</span> <span class="sy0">=</span> currItem._x<span class="sy0">+</span><span class="st0">'px'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">fontSize</span> <span class="sy0">=</span> <span class="nu0">100</span><span class="sy0">*</span>currItem.<span class="me1">scale</span><span class="sy0">+</span><span class="st0">'%'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>currItem<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>opacity<span class="sy0">:</span><span class="br0">&#40;</span>currItem.<span class="me1">scale</span><span class="sy0">-</span>.5<span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Center for rotation</span><br />
<span class="kw2">var</span> axisRotation <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h4>Add To Scene</h4>
<p>First thing you’ll see is the addToScene function.&#160; This basically populates the array that is used to render the scene.&#160; If you object is in this array it will get rendered, if it isn’t….it missed the bus.</p>
<p>&#160;</p>
<h4>Transform 3D point to 2D</h4>
<p>Next is the Transform3DPointsTo2DPoints function.&#160; This is probably the most important part of the engine.&#160; What it does is it takes a 3D point in space (x,y,z) and through a little magic converts it into a 2D point that can be displayed on screen.</p>
<p>&#160;</p>
<h4>Render Camera</h4>
<p>The renderCamera function doesn’t do anything too complicated.&#160; It’s sole purpose is to display the items on screen.&#160; It does this by looping through the objects in the scene, and passes each one into the Transform3DPointsTo2DPoints function.&#160; The function will return a 2D point that can be plotted using CSS.&#160; You might have noticed I’m using JavaScript for the CSS and selecting of the DOM instead of jQuery.&#160; Initially I used jQuery but found the browser was crawling, so I went back to the old fashion way.</p>
<p>&#160;</p>
<h2>The Cube</h2>
<p>I’ve put the Cube class in a separate file so you can import objects as you need them instead of having to load ones you aren’t using.&#160; </p>
<p>The class isn’t overly complicated.&#160; It’s creating an array and placing all the points on the cube into that array.&#160; It uses the make3DPoint function from the DisplayObject3D class to create each point. </p>
<p>Here is the code:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Cube <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>size<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//if the size is not set then give a default</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>size <span class="sy0">===</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; size <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Create a 3d point for every point on the cube.</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//make3dpoint is a function inherited from</span><br />
&nbsp; &nbsp; <span class="co1">//DisplayObject3D</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Inherit DisplayObject3d methods and properties</span><br />
Cube.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>&#160;</p>
<h2>Using the 3D Engine</h2>
<p>There are a few steps that need to be done in order for this to work.&#160;&#160; First we’ll need some HTML. I’ll just create a div with an id and place a &lt;ul&gt; full of smiley faces.&#160; If you wanted you can leave the div blank and it will automatically create a bunch of +’s for you.</p>
<p>Here is the HTML:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-1">&lt;!-- List of smiley faces --&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc-1">&lt;!-- </span><br />
<span class="sc-1">&nbsp; &nbsp; Each 3d object is a seperate js so you only </span><br />
<span class="sc-1">&nbsp; &nbsp; have to import what you need.</span><br />
<span class="sc-1">--&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Cube.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Next comes the jQuery. There are a couple of steps you need to do:</p>
<ol>
<li>Create a camera and initialize it. </li>
<li>Create an Object Holder (Object3D) </li>
<li>Create an Object and put it in the holder. </li>
<li>Create a Scene and put the holder in it. </li>
</ol>
<p>Here is the jQuery:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<br />
<span class="co1">//Create a camera</span><br />
<span class="kw2">var</span> camera <span class="sy0">=</span> <span class="kw2">new</span> Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//initialize it.</span><br />
camera.<span class="me1">init</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">300</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create an object holder.</span><br />
<span class="kw2">var</span> <span class="kw1">item</span> <span class="sy0">=</span> <span class="kw2">new</span> Object3D<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//add a new cube.</span><br />
<span class="kw1">item</span>.<span class="me1">addChild</span><span class="br0">&#40;</span><span class="kw2">new</span> Cube<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Create a scene</span><br />
<span class="kw2">var</span> scene <span class="sy0">=</span> <span class="kw2">new</span> Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Place the object Holder in the scene.</span><br />
scene.<span class="me1">addToScene</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Animates the cube.</span><br />
<span class="kw2">var</span> animateIt <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//rotates on the y and x axis.</span><br />
&nbsp; &nbsp; axisRotation.<span class="me1">y</span> <span class="sy0">+=</span> .01<br />
&nbsp; &nbsp; axisRotation.<span class="me1">x</span> <span class="sy0">-=</span> .01<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Render the scene.</span><br />
&nbsp; &nbsp; scene.<span class="me1">renderCamera</span><span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
setInterval<span class="br0">&#40;</span>animateIt<span class="sy0">,</span> <span class="nu0">20</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>I didn’t get a chance to make it interact with the mouse. You can do that just by adjusting the axisRotation x, y and z values when the mouse moves.&#160; Perhaps I’ll do this in my next post.</p>
<p>&#160;</p>
<h2>That’s All For Now</h2>
<p>Stay tuned for the next couple of posts.&#160; I plan to make a couple different shapes for this.&#160; If you feel frisky by all means try and create your own shapes.&#160; Just create an array with a bunch of 3D Points.&#160;&#160; </p>
<p>There are still a couple of kinks to work out, but for now here is all the code together.</p>
<p>3DEngine.js</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="coMULTI">/*<br />
* DisplayObject3D ----------------------------------------------<br />
*/</span><br />
<span class="kw2">var</span> DisplayObject3D <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
DisplayObject3D.<span class="me1">prototype</span>._x <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
DisplayObject3D.<span class="me1">prototype</span>._y <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create 3d Points</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">make3DPoint</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> point <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">z</span> <span class="sy0">=</span> z<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> point<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create 2d Points</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">make2DPoint</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span> depth<span class="sy0">,</span> scaleFactor<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> point <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">depth</span> <span class="sy0">=</span> depth<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">scaleFactor</span> <span class="sy0">=</span> scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> point<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">container</span> <span class="sy0">=</span> undefined<span class="sy0">;</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">init</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> <span class="sy0">=</span> $<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">containerId</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//if there isn't a ul than it creates a list of +'s</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span>container<span class="sy0">+</span><span class="st0">&quot;:has(ul)&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span> <span class="sy0">===</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">'&lt;b id=&quot;item'</span><span class="sy0">+</span>i<span class="sy0">+</span><span class="st0">'&quot;&gt;+&lt;/b&gt;'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span>&nbsp; <br />
<br />
<span class="coMULTI">/*<br />
* DisplayObject3D End ----------------------------------------------<br />
*/</span><br />
<br />
<br />
<span class="coMULTI">/*<br />
* Camera3D ----------------------------------------------<br />
*/</span><br />
<span class="kw2">var</span> Camera3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">x</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">z</span> <span class="sy0">=</span> <span class="nu0">500</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">focalLength</span> <span class="sy0">=</span> <span class="nu0">1000</span><span class="sy0">;</span><br />
<br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">scaleRatio</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">focalLength</span><span class="sy0">/</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">focalLength</span> <span class="sy0">+</span> <span class="kw1">item</span>.<span class="me1">z</span> <span class="sy0">-</span> <span class="kw1">this</span>.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">init</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="sy0">,</span>focalLength<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">z</span> <span class="sy0">=</span> z<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">focalLength</span> <span class="sy0">=</span> focalLength<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="coMULTI">/*<br />
* Camera3D End ----------------------------------------------<br />
*/</span><br />
<br />
<br />
<span class="coMULTI">/*<br />
* Object3D ----------------------------------------------<br />
*/</span><br />
<span class="kw2">var</span> Object3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> <span class="sy0">=</span> $<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Object3D.<span class="me1">prototype</span>.<span class="me1">objects</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
Object3D.<span class="me1">prototype</span>.<span class="me1">addChild</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>object3D<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">objects</span>.<span class="me1">push</span><span class="br0">&#40;</span>object3D<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; object3D.<span class="me1">init</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">container</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> object3D<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="coMULTI">/*<br />
* Object3D End ----------------------------------------------<br />
*/</span><br />
<br />
<br />
<span class="coMULTI">/*<br />
* Scene3D ----------------------------------------------<br />
*/</span><br />
<br />
<span class="kw2">var</span> Scene3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">sceneItems</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">addToScene</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">sceneItems</span>.<span class="me1">push</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">Transform3DPointsTo2DPoints</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>points<span class="sy0">,</span> axisRotations<span class="sy0">,</span>camera<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> TransformedPointsArray <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sx <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">x</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cx <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">x</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sy <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">y</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cy <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">y</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sz <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cz <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="sy0">,</span> xy<span class="sy0">,</span>xz<span class="sy0">,</span> yx<span class="sy0">,</span>yz<span class="sy0">,</span> zx<span class="sy0">,</span>zy<span class="sy0">,</span> scaleFactor<span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">var</span> i <span class="sy0">=</span> points.<span class="me1">length</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>i<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">x</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">y</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">z</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around x</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xy <span class="sy0">=</span> cx<span class="sy0">*</span>y <span class="sy0">-</span> sx<span class="sy0">*</span>z<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xz <span class="sy0">=</span> sx<span class="sy0">*</span>y <span class="sy0">+</span> cx<span class="sy0">*</span>z<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around y</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; yz <span class="sy0">=</span> cy<span class="sy0">*</span>xz <span class="sy0">-</span> sy<span class="sy0">*</span>x<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; yx <span class="sy0">=</span> sy<span class="sy0">*</span>xz <span class="sy0">+</span> cy<span class="sy0">*</span>x<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around z</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; zx <span class="sy0">=</span> cz<span class="sy0">*</span>yx <span class="sy0">-</span> sz<span class="sy0">*</span>xy<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; zy <span class="sy0">=</span> sz<span class="sy0">*</span>yx <span class="sy0">+</span> cz<span class="sy0">*</span>xy<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; scaleFactor <span class="sy0">=</span> camera.<span class="me1">focalLength</span><span class="sy0">/</span><span class="br0">&#40;</span>camera.<span class="me1">focalLength</span> <span class="sy0">+</span> yz<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy0">=</span> zx<span class="sy0">*</span>scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy0">=</span> zy<span class="sy0">*</span>scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z <span class="sy0">=</span> yz<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> displayObject <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; TransformedPointsArray<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> displayObject.<span class="me1">make2DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="sy0">,</span> <span class="sy0">-</span>z<span class="sy0">,</span> scaleFactor<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> TransformedPointsArray<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">renderCamera</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> <span class="nu0">0</span> <span class="sy0">;</span> i<span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">sceneItems</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> obj <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">sceneItems</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">objects</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> screenPoints <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">Transform3DPointsTo2DPoints</span><span class="br0">&#40;</span>obj.<span class="me1">pointsArray</span><span class="sy0">,</span> axisRotation<span class="sy0">,</span> camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> hasList <span class="sy0">=</span> <span class="br0">&#40;</span>document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;ul&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>k<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> k <span class="sy0">&lt;</span> obj.<span class="me1">pointsArray</span>.<span class="me1">length</span><span class="sy0">;</span> k<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> currItem <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>hasList<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;ul&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;li&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;*&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>currItem<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem._x <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">x</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem._y <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">y</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">scale</span> <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">scaleFactor</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">position</span> <span class="sy0">=</span> <span class="st0">&quot;absolute&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">top</span> <span class="sy0">=</span> currItem._y<span class="sy0">+</span><span class="st0">'px'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">left</span> <span class="sy0">=</span> currItem._x<span class="sy0">+</span><span class="st0">'px'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">fontSize</span> <span class="sy0">=</span> <span class="nu0">100</span><span class="sy0">*</span>currItem.<span class="me1">scale</span><span class="sy0">+</span><span class="st0">'%'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>currItem<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>opacity<span class="sy0">:</span><span class="br0">&#40;</span>currItem.<span class="me1">scale</span><span class="sy0">-</span>.5<span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="coMULTI">/*<br />
* Scene3D End ----------------------------------------------<br />
*/</span><br />
<br />
<br />
<span class="co1">//Center for rotation</span><br />
<span class="kw2">var</span> axisRotation <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>Cube.js</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Cube <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>size<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>size <span class="sy0">===</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; size <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Cube.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>index.html</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Untitled Page<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #item{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:300px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #69c;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-weight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size:2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Cube.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Cube<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> .01</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x -<span class="sy0">=</span> .01</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/3D-Engine/example.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/3D-Engine/" target="_blank">Example</a></div>
<p>&#160;</p>
<h3>Related</h3>
<table border="0" cellspacing="5" cellpadding="5">
<tr>
<td>
			<a href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank">3D Plane</a><br />
 <a href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank"><img src="http://www.devirtuoso.com/wp-content/uploads/2009/09/3d-plane.jpg" alt="3d Plane" title="3d Plane" width="100" height="100" /></a>
		</td>
<td>
			 <a href="http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/" target="_blank">Wobbling Carousel</a><br />
 <a href="http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/" target="_blank"> <img src="http://www.devirtuoso.com/wp-content/uploads/2009/09/wobbling-carousel.jpg" width="100" height="100" alt="wobbling carousel" title="wobbling carousel" /></a></p>
</td>
<td>
 <a href="http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/" target="_blank">3D Sphere</a><br />
			 <a href="http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/" target="_blank"><img src="http://www.devirtuoso.com/wp-content/uploads/2009/09/3d-sphere.jpg" alt="3d sphere" width="100" height="100" title="3d sphere" /></a>
		</td>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Object Oriented Programming with JavaScript</title>
		<link>http://www.devirtuoso.com/2009/09/object-oriented-programming-with-javascript/</link>
		<comments>http://www.devirtuoso.com/2009/09/object-oriented-programming-with-javascript/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 05:53:39 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1064</guid>
		<description><![CDATA[For all those that use Object Oriented Programming know the benefits.&#160; The ability to write reusable code is a real time saver in the long run.&#160; This post will cover how to write the basic structure of Object Oriented Programming in JavaScript.

&#160;
The Basics
For those of you that don’t know what Object Oriented Programming (oop) is, [...]]]></description>
			<content:encoded><![CDATA[<p>For all those that use Object Oriented Programming know the benefits.&#160; The ability to write reusable code is a real time saver in the long run.&#160; This post will cover how to write the basic structure of Object Oriented Programming in JavaScript.</p>
<p><span id="more-1064"></span></p>
<p>&#160;</p>
<h2>The Basics</h2>
<p>For those of you that don’t know what Object Oriented Programming (oop) is, it’s simply a way of writing code that allows you to reuse the same code in several other projects.&#160; Everything is encapsulated into nice little packages.&#160; This post won’t go over the actual theory of OOP, but I would definitely recommend looking into it.&#160; I’m sure if you Googled it, thousands of entries would come up.</p>
<p>&#160;</p>
<h2>The Ways </h2>
<p>There are a couple of ways to handle creating a class in JavaScript. </p>
<ul>
<li>Placing everything inside a function</li>
<li>Placing everything inside an object</li>
<li>Using prototype to build a class</li>
</ul>
<h4>Placing Everything Inside a Function</h4>
<p>In my opinion this is probably the easiest to read out of all of them.&#160; However it isn’t the most efficient from a processor point of view.&#160; </p>
<p>Say were going to build a Dog class. </p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> Dog <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">position</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">bark</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;wuff&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">walk</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">position</span> <span class="sy0">+=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;position = &quot;</span><span class="sy0">+</span><span class="kw1">this</span>.<span class="me1">position</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">getName</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="kw3">name</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw2">var</span> dog <span class="sy0">=</span> <span class="kw2">new</span> Dog<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dog.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;Ralph&quot;</span><span class="sy0">;</span><br />
dog.<span class="me1">bark</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Popup box with &quot;wuff&quot;</span><br />
dog.<span class="me1">walk</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Position increases by 1;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span>dog.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Outputs dog's name*/</span></div></td></tr></tbody></table></div>
<p>Class methods are simply variables assigned to functions, and public variables simply use &#8220;this&#8221; infront of their names.  If you wish to make a private variable, you would just create a regular variable <br />using &#8220;var&#8221; (e.g. var test = 1;)</p>
<p>&#160;</p>
<h4>Placing Everything Inside an Object</h4>
<p>This is handy if you don’t want to instantiate the class every time you want to use it.&#160; The downside is that it makes inheritance a little more difficult.</p>
<p>Here is the same Dog class but using an Object.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Dog <span class="sy0">=</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">name</span>&nbsp; &nbsp; <span class="sy0">:</span> &nbsp; <span class="st0">&quot;&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; position<span class="sy0">:</span> &nbsp; <span class="nu0">0</span><span class="sy0">,</span><br />
&nbsp; &nbsp; bark&nbsp; &nbsp; <span class="sy0">:</span> &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;wuff&quot;</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; walk&nbsp; &nbsp; <span class="sy0">:</span> &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">position</span> <span class="sy0">+=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;position = &quot;</span><span class="sy0">+</span><span class="kw1">this</span>.<span class="me1">position</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; getName <span class="sy0">:</span> &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="kw3">name</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
Dog.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;Ralph&quot;</span><span class="sy0">;</span><br />
Dog.<span class="me1">bark</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Popup box with &quot;wuff&quot;</span><br />
Dog.<span class="me1">walk</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Position increases by 1;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span>Dog.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Outputs dog's name</span></div></td></tr></tbody></table></div>
<p>This method uses JavaScript Object Notation (JSON) to layout the class.  Keys go on the left, and values go on the right.  Once again methods are simply functions assigned to variables.</p>
<p>&#160;</p>
<h4>Using prototype to Build a Class</h4>
<p>This is probably the preferred method of OOP in JavaScript.&#160; It’s a little harder to read, but say if we were to create thousands of dog objects, this would out perform the other methods.&#160; Using prototypes it doesn’t store the functions within the class. This means you aren’t creating thousands of functions, you’re only create one function that is pointed to a thousand times.&#160; Plus it’s easier to deal with inheritance.</p>
<p>Here is the Dog class yet again.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> Dog <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><br />
Dog.<span class="me1">prototype</span>.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
Dog.<span class="me1">prototype</span>.<span class="me1">position</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
Dog.<span class="me1">prototype</span>.<span class="me1">bark</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;wuff&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
Dog.<span class="me1">prototype</span>.<span class="me1">walk</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">position</span> <span class="sy0">+=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;position = &quot;</span><span class="sy0">+</span><span class="kw1">this</span>.<span class="me1">position</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
Dog.<span class="me1">prototype</span>.<span class="me1">getName</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="kw3">name</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw2">var</span> dog <span class="sy0">=</span> <span class="kw2">new</span> Dog<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dog.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;Ralph&quot;</span><span class="sy0">;</span><br />
dog.<span class="me1">bark</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Popup box with &quot;wuff&quot;</span><br />
dog.<span class="me1">walk</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Position increases by 1;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span>dog.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Outputs dog's name</span></div></td></tr></tbody></table></div>
<p>What the prototype keyword is doing here is creating a framework.  So when the class is instanciated it will have all the methods and properties that it needs.</p>
<p>&#160;</p>
<p>Here is a Puppy class to show how inheritance is done.&#160; It inherits all the methods of the Dog class, but overwrites the bark method for a more puppy like bark.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> Puppy <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<br />
Puppy.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> Dog<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
Puppy.<span class="me1">prototype</span>.<span class="me1">bark</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;Yelp&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw2">var</span> puppy <span class="sy0">=</span> <span class="kw2">new</span> Puppy<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
puppy.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;Ralph&quot;</span><span class="sy0">;</span><br />
puppy.<span class="me1">bark</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Popup box with &quot;Yelp&quot;</span><br />
puppy.<span class="me1">walk</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Position increases by 1;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span>puppy.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Outputs puppy's name</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Conclusion</h2>
<p>This is by no means a complete tutorial of everything OOP.&#160; This shows the basic structures of how JavaScript can handle OOP.&#160; Out of the three that were outlined, it is probably best to stick with the prototype method. If there are any Actionscript 2 people out there, you’ll feel right at home with this method. </p>
<p>&#160;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/object-oriented-programming-with-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Beginners Guide to jQuery Sorting Part 2</title>
		<link>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting-part-2/</link>
		<comments>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting-part-2/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 21:56:03 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1040</guid>
		<description><![CDATA[In the last tutorial we covered how to reorder a list by dragging and dropping.&#160; In this tutorial we will show how to save the order of the list via Ajax.

Where We Left Off
We should be at a point where we now know how to reorder a list.&#160; If you haven’t read the previous tutorial [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a title="Beginners Guide to jQuery Sorting" href="http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting/" target="_blank">last tutorial</a> we covered how to reorder a list by dragging and dropping.&#160; In this tutorial we will show how to <strong>save the order</strong> of the list via <strong>Ajax</strong>.</p>
<p><span id="more-1040"></span></p>
<h2>Where We Left Off</h2>
<p>We should be at a point where we now know how to reorder a list.&#160; If you haven’t read the previous tutorial or aren’t certain on how to reorder lists in jQuery, I encourage you to check out <a href="http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting/" target="_blank">Beginners Guide to jQuery Sorting part 1</a>.</p>
<p>Here is the code from the previous post:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a> <span class="kw3">lang</span><span class="sy0">=</span><span class="st0">&quot;en&quot;</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>jQuery UI Sortable - Drop placeholder<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color:white;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:300px<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0 5px 5px 5px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 5px 20px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size: 1.2em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #678;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cursor:pointer;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li.highlight { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line-height: 1.2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #036;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-image: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border:none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.sortable.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; $(function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).sortable({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder: 'highlight'<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).disableSelection();<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;sortable&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 1<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 2<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 3<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 4<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 5<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 6<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 7<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
<br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>What We’re Building</h2>
<p>This time around we’re just going to take the current order of the list and save it to the database for future use.</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/Drag-Drop/example2.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/Drag-Drop/index.php" target="_blank">Example</a></div>
<p><a title="Drag and Drop Example" href="http://www.devirtuoso.com/Examples/Drag-Drop/index.php" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image.png" width="394" height="349" /></a> </p>
<p>&#160;</p>
<h2>Reworking the List</h2>
<p>Previously we had a simple HTML un-ordered list.&#160; This time we’re going to make it a little more complicated, with good reason of course.&#160; In order to view the updates we make to the database, we first have to have a list&#160; pulling from the database.&#160; For this we will be using PHP and MySQL.</p>
<p>First we’re going to create a file called db.php.&#160; In this file we’re going to do two things.&#160; First connect to the database, and second select all the items from the database and create a list from them.&#160; I’m not going to go into too much detail with the connection info.&#160; If you want a little refresher, we went into more depth in our <a href="http://www.devirtuoso.com/2009/08/beginners-guide-to-using-ajax-with-jquery-part-2/" target="_blank">Beginners Guide to Using Ajax with jQuery</a> post.</p>
<p>Here is the PHP code for connecting to the database:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="co1">//Connection Info</span><br />
<span class="re0">$username</span><span class="sy0">=</span><span class="st0">&quot;root&quot;</span><span class="sy0">;</span><br />
<span class="re0">$password</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="re0">$host</span><span class="sy0">=</span><span class="st0">&quot;localhost&quot;</span><span class="sy0">;</span><br />
<span class="re0">$database</span> <span class="sy0">=</span> <span class="st0">&quot;DragDrop&quot;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Connect to database</span><br />
<span class="re0">$mysqli</span> <span class="sy0">=</span> &nbsp;<span class="kw2">new</span> mysqli<span class="br0">&#40;</span><span class="re0">$host</span><span class="sy0">,</span> <span class="re0">$username</span><span class="sy0">,</span> <span class="re0">$password</span><span class="sy0">,</span> <span class="re0">$database</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">// check connection </span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span>mysqli_connect_errno<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Connect failed: <span class="es6">%s</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> mysqli_connect_error<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>I guess at this point it might be helpful to see what the database looks like.&#160; We have 3 columns:</p>
<ul>
<li>&#160;<strong>itemID</strong> (unique identifier), </li>
<li><strong>content</strong> (the text inside our list) </li>
<li><strong>Order</strong> (keep track of the order) </li>
</ul>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="database table" border="0" alt="database table" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image1.png" width="287" height="210" /></p>
<p>&#160;</p>
<p>&#160;</p>
<p>Now we’ll create a function that selects all the items from the database and outputs an un-ordered list.</p>
<p>Here is the <strong>PHP</strong>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">//Display a list of all entries</span><br />
<span class="kw2">function</span> displayAll <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$mysqli</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Get all Entries</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Items` ORDER BY `Order` ASC&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//start list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;ul id='sortable'&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//add a new list item each iteration</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li id='item_&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'itemID'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;'&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'content'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//close list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;ul&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//display list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$returnValue</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>First we query the database with the mysqli object we created when we connected to the database.&#160; If it returns results without errors then we can go ahead with making our list.&#160; </p>
<p>Making the list isn’t too hard, we’re simply creating a variable that holds our list.&#160; We then cycle through all of the items returned from the database and add it to the end of our variable.&#160; After we have all the info in our variable, we display it for the world to see.&#160; One special note, you’ll see that we are giving each &lt;li&gt; an id.&#160; We’re going to use this when we get to the Ajax portion of the tutorial.&#160; For now just know that the id is required.</p>
<p>&#160;</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="display all function" border="0" alt="display all function" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image2.png" width="420" height="304" /> </p>
<p>&#160;</p>
<h2>The New HTML</h2>
<p>Now that we have our db.php file ready to go, we can now make use of it in our main file.</p>
<p>First off we’re going to import the file to use it.&#160; At the very top we’ll just put:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span> <span class="kw1">require</span><span class="br0">&#40;</span><span class="st0">&quot;db.php&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Now we can use the function displayAll() that we just created.&#160; We’ll be replacing the un-ordered list with this function.&#160; When the page is processed, the function will pull the data from the database and output a brand spankin’ new list.&#160; Pretty sweet huh.</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;?php</span><br />
<br />
<span class="sc2"><span class="sy0">//</span>Displays the list.</span><br />
<br />
<span class="sc2">displayAll<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">?&gt;</span><br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>The jQuery</h2>
<p>The jQuery changed a bit.&#160; We’re adding a new update parameter to the sortable function.&#160; This will be called whenever the order has been changed.</p>
<p>In the update function we’ll be doing 3 things.</p>
<ul>
<li>Prepping the info to be sent via Ajax </li>
<li>Send the info via Ajax </li>
<li>Display the new updated list </li>
</ul>
<p>Here is the <strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#sortable&quot;</span><span class="br0">&#41;</span>.<span class="me1">sortable</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; placeholder<span class="sy0">:</span> <span class="st0">'highlight'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//NEW----Called when order is changed</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; update<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Prep the list order for transfer</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> listOrder <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">sortable</span><span class="br0">&#40;</span><span class="st0">&quot;serialize&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//send info to our php file.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&quot;update.php&quot;</span><span class="sy0">,</span> listOrder<span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>response<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//update the list with the new list.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;sortable&quot;</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span>response<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#sortable&quot;</span><span class="br0">&#41;</span>.<span class="me1">disableSelection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="serialize order" border="0" alt="serialize order" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image3.png" width="420" height="305" /> </p>
<p>&#160;</p>
<h4>Prepping the Info</h4>
<p>First thing we tackle is prepping the info by serializing it.&#160; This just means that we’re taking the order of the list and preparing them in a way that they can be attached to a url.(e.g. www.domain.com<strong>?serialized=data</strong> )&#160; For this serialize function to work we have to create ids for our list items in a particular way.&#160; If I want an array called “item”&#160; then I would give my li tags an id of item_1, item_2, item_3, etc. The serialize function will take the text before the underscore as the array name, and the number after as it’s value.&#160; So a list with ids of item_1, item_2 would be serialized to item[]=1&amp;item[]=2 .&#160;&#160; When we created the function displayAll() we took this into consideration, and put the items ID value from the database after the underscore so we can reference it later.</p>
<p>&#160;</p>
<h4>Send Info</h4>
<p>Next comes the Ajax.&#160; We’re going to use the post function.&#160; We simply have to give it a url, any data we want to send to the url and the function we want to call when we receive something back from the url.</p>
<p>&#160;</p>
<h4>Display New List</h4>
<p>The function that handles the response simply just switches out the list’s HTML with the new HTML.</p>
<p>&#160;</p>
<h2>Updating the Database</h2>
<p>The first thing we’re going to do is create a file called update.php.&#160; This is the file that will be called by the Ajax.&#160; In this file a couple of things are going to happen.</p>
<ul>
<li>Get the array sent in by the Ajax </li>
<li>Cycle through each item in the array </li>
<li>Update the database with the new value </li>
<li>Display a new list </li>
</ul>
<p>Here is the <strong>PHP</strong>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="co1">//Get the Array from Ajax</span><br />
<span class="co1">//Make sure it is an array.</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_array"><span class="kw3">is_array</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'item'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'item'</span><span class="br0">&#93;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$items</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
<span class="co1">//Connect to database.</span><br />
<span class="kw1">require</span> <span class="st_h">'db.php'</span><span class="sy0">;</span> &nbsp;<br />
<br />
&nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Cycle through Array.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;</span> <a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$items</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Make sure the value of the item is numeric.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$id</span> <span class="sy0">=</span> <span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Invalid ID&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Set the database order to match the order of the array.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> <span class="sy0">=</span> <span class="st0">&quot;UPDATE `Items` SET `Order` = &quot;</span> <span class="sy0">.</span> <span class="re0">$i</span> <span class="sy0">.</span> <span class="st0">&quot; WHERE `itemID` = &quot;</span> <span class="sy0">.</span> <span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span> or <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st_h">'Error, insert query failed'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/* Display a new list */</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Items` ORDER BY `Order` ASC&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li id='item_&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'itemID'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;'&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'content'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$returnValue</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h4>Get the Array from Ajax</h4>
<p>Since we used the post method in our jQuery, PHP’s $_POST variable will be populated by what we pasted in.&#160; In our case it was the item array. It’s always good practice to make sure you’ll be receiving what you’re expecting.&#160; In this case we’re expecting an array, so we check and make sure it is an array.</p>
<h4>&#160;</h4>
<h4>Cycle through the Array</h4>
<p>After we’re sure we have an array on our hands, we cycle through each element in the array.&#160; For each element we’re going to check and make sure the value is a number.&#160; If we didn’t malicious users could pass in some harmful stuff.</p>
<h4>&#160;</h4>
<h4>Update the Database</h4>
<p>After we have verified that array’s value is a number, we then pass it into our SQL statement.&#160; The array is ordered in the same manner as the list was.&#160; So the first item in the array is also the first item in the list.&#160; The SQL will&#160; then set the Order of the item to where it is in the array.</p>
<h4>&#160;</h4>
<h4>Display a New List</h4>
<p>The code for this is pretty well the same as displayAll().&#160; The only difference is that we’re leaving the &lt;ul&gt;&lt;/ul&gt; off, as these will already be in place, and we’re just replacing the innards.</p>
<p>&#160;</p>
<h2>That’s IT</h2>
<p>That’s pretty well it.&#160; Now we have our initial code that display’s our list.&#160; Then our jQuery that passes on the order of the list via AJAX.&#160; Then our update PHP file that checks to make sure the values are good, and passes them to the database.&#160; After all that it passes the new list back to the jQuery to display.&#160; Voila!</p>
<p>db.php : </p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<span class="co1">//Connection Info</span><br />
<span class="re0">$username</span><span class="sy0">=</span><span class="st0">&quot;root&quot;</span><span class="sy0">;</span><br />
<span class="re0">$password</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="re0">$host</span><span class="sy0">=</span><span class="st0">&quot;localhost&quot;</span><span class="sy0">;</span><br />
<span class="re0">$database</span> <span class="sy0">=</span> <span class="st0">&quot;DragDrop&quot;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Connect to database</span><br />
<span class="re0">$mysqli</span> <span class="sy0">=</span> &nbsp;<span class="kw2">new</span> mysqli<span class="br0">&#40;</span><span class="re0">$host</span><span class="sy0">,</span> <span class="re0">$username</span><span class="sy0">,</span> <span class="re0">$password</span><span class="sy0">,</span> <span class="re0">$database</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">// check connection </span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span>mysqli_connect_errno<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Connect failed: <span class="es6">%s</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> mysqli_connect_error<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//Display a list of all entries</span><br />
<span class="kw2">function</span> displayAll <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$mysqli</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Get all Entries</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Items` ORDER BY `Order` ASC&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//start list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;ul id='sortable'&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//add a new list item each iteration</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li id='item_&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'itemID'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;'&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'content'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//close list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;ul&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//display list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$returnValue</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Here is the <strong>HTML / jQuery / PHP</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;?php require<span class="br0">&#40;</span><span class="st0">&quot;db.php&quot;</span><span class="br0">&#41;</span>; ?&gt;</span><br />
<br />
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a> <span class="kw3">lang</span><span class="sy0">=</span><span class="st0">&quot;en&quot;</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>jQuery UI Sortable - Drop placeholder<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color:white;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:300px<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0 5px 5px 5px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 5px 20px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size: 1.2em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #678;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cursor:pointer;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li.highlight { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line-height: 1.2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #036;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-image: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border:none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.sortable.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; $(function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).sortable({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder: 'highlight',<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //NEW----Called when order is changed<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update: function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Prep the list order for transfer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var listOrder = $(this).sortable(&quot;serialize&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //send info to our php file.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.post(&quot;update.php&quot;, listOrder, function(response){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //update the list with the new list.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(&quot;sortable&quot;).html(response);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).disableSelection();<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;?php</span><br />
<br />
<span class="sc2"><span class="sy0">//</span>Displays the list.</span><br />
<br />
<span class="sc2">displayAll<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">?&gt;</span><br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>update.php</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="co1">//Get the Array from Ajax</span><br />
<span class="co1">//Make sure it is an array.</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_array"><span class="kw3">is_array</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'item'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'item'</span><span class="br0">&#93;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$items</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
<span class="co1">//Connect to database.</span><br />
<span class="kw1">require</span> <span class="st_h">'db.php'</span><span class="sy0">;</span> &nbsp;<br />
<br />
&nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Cycle through Array.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;</span> <a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$items</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Make sure the value of the item is numeric.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$id</span> <span class="sy0">=</span> <span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Invalid ID&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Set the database order to match the order of the array.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> <span class="sy0">=</span> <span class="st0">&quot;UPDATE `Items` SET `Order` = &quot;</span> <span class="sy0">.</span> <span class="re0">$i</span> <span class="sy0">.</span> <span class="st0">&quot; WHERE `itemID` = &quot;</span> <span class="sy0">.</span> <span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span> or <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st_h">'Error, insert query failed'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/* Display a new list */</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Items` ORDER BY `Order` ASC&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li id='item_&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'itemID'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;'&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'content'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$returnValue</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/Drag-Drop/example2.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/Drag-Drop/index.php" target="_blank">Example</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Beginners Guide to jQuery Sorting</title>
		<link>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting/</link>
		<comments>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 23:05:42 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1029</guid>
		<description><![CDATA[Beginners might often steer away from trying to reorder lists by dragging and dropping.&#160; The thought of doing something like that sounds daunting.&#160; Luckily jQuery has made it relatively simple. Here is a tutorial on how to make a list sortable.

What We’re Building
Quite simply, we’re trying to give the user the ability to sort a [...]]]></description>
			<content:encoded><![CDATA[<p>Beginners might often steer away from trying to reorder lists by dragging and dropping.&#160; The thought of doing something like that sounds daunting.&#160; Luckily jQuery has made it relatively simple. Here is a tutorial on how to make a list sortable.</p>
<p><span id="more-1029"></span></p>
<h2>What We’re Building</h2>
<p>Quite simply, we’re trying to give the user the ability to sort a list by dragging and dropping items into place.&#160; We’re also going to give a nice place holder to help guide the user.</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/Drag-Drop/example.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/Drag-Drop/"class="Example" target="_blank">Example</a></div>
<p><a title="Drag and Drop Example" href="http://www.devirtuoso.com/Examples/Drag-Drop" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image.png" width="394" height="349" /></a> </p>
<p>&#160;</p>
<h2>Building the HTML</h2>
<p>Fortunately the HTML is pretty simple.&#160; All you will need is a simple un-ordered list, with some items in it. </p>
<p><strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;sortable&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 1<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 2<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 3<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 4<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 5<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 6<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 7<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>The CSS</h2>
<p>The CSS is solely for appearances.&#160; You don’t have to use what I used here, feel free to experiment with different styles.&#160; The only class that needs any sort of explanation is the highlight class.&#160; This class is for the placeholder for when the user starts dragging. So more than likely you’ll want to make this subdue, it’s just suppose to be a hint of where to drag the box.</p>
<p><strong>CSS</strong>: </p>
<div class="codecolorer-container css " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br /></div></td><td><div class="css codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="coMULTI">/*Styling the body*/</span><br />
body<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#111</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span><span class="kw2">white</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">font-family</span><span class="sy0">:</span> Arial<span class="sy0">,</span> <span class="st0">&quot;MS Trebuchet&quot;</span><span class="sy0">,</span> <span class="kw2">sans-serif</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Get rid of bullets and list indent,<br />
&nbsp; &nbsp;also adjust the width to what we want*/</span><br />
<span class="re0">#sortable</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <span class="kw1">list-style-type</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span><span class="re3">300px</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Styling each of the list elements*/</span><br />
<span class="re0">#sortable</span> li <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="nu0">0</span> <span class="re3">5px</span> <span class="re3">5px</span> <span class="re3">5px</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">5px</span> <span class="re3">20px</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">font-size</span><span class="sy0">:</span> <span class="re3">1.2em</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">1.5em</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#678</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">cursor</span><span class="sy0">:</span><span class="kw2">pointer</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Styling the placeholder for when<br />
&nbsp; &nbsp;the user starts dragging an item */</span><br />
<span class="re0">#sortable</span> li<span class="re1">.highlight</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">1.5em</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">line-height</span><span class="sy0">:</span> <span class="re3">1.2em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#036</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background-image</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">border</span><span class="sy0">:</span><span class="kw2">none</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>&#160;</p>
<h2>The jQuery</h2>
<p>We’ll be using a library from the jQuery UI.&#160; This does all the complicated code so you don’t have to.&#160; You’re going to have to import 3 files</p>
<ol>
<li>jQuery : <a title="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" href="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" target="_blank">http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js</a></li>
<li>jQuery UI Core file : <a target="_blank" title="http://jqueryui.com/latest/ui/ui.core.js" href="http://jqueryui.com/latest/ui/ui.core.js">http://jqueryui.com/latest/ui/ui.core.js</a></li>
<li>jQuery UI Sortable file : <a target="_blank" title="http://jqueryui.com/latest/ui/ui.sortable.js" href="http://jqueryui.com/latest/ui/ui.sortable.js">http://jqueryui.com/latest/ui/ui.sortable.js</a></li>
</ol>
<p>Once we have these imported then we’re good to go.&#160; The jQuery that we’ll have to write isn’t overly complicated.</p>
<p><strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">//When everything is loaded...</span><br />
$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//makes the list with the id &quot;sortable&quot; sortable.</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//the placehoder option is not necessary.</span><br />
&nbsp; &nbsp; <span class="co1">//the highlight is the CSS class applied</span><br />
&nbsp; &nbsp; <span class="co1">//to the placeholder.</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#sortable&quot;</span><span class="br0">&#41;</span>.<span class="me1">sortable</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; placeholder<span class="sy0">:</span> <span class="st0">'highlight'</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//prevents the list from being selectable.&nbsp; </span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#sortable&quot;</span><span class="br0">&#41;</span>.<span class="me1">disableSelection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>&#160;</p>
<h2>Conclusion</h2>
<p>Now that you realize how easy it is to create a sortable list, use and abuse it.&#160; Keep an eye out for part two of this tutorial where I will show how to interact with the database via AJAX.</p>
<p>Here is the code all together:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a> <span class="kw3">lang</span><span class="sy0">=</span><span class="st0">&quot;en&quot;</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>jQuery UI Sortable - Drop placeholder<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color:white;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:300px<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0 5px 5px 5px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 5px 20px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size: 1.2em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #678;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cursor:pointer;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li.highlight { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line-height: 1.2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #036;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-image: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border:none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.sortable.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; $(function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).sortable({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder: 'highlight'<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).disableSelection();<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;sortable&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 1<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 2<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 3<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 4<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 5<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 6<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 7<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
<br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/Drag-Drop/example.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/Drag-Drop/"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Beginners Guide to jQuery Mouse Events</title>
		<link>http://www.devirtuoso.com/2009/08/beginners-guide-to-jquery-mouse-events/</link>
		<comments>http://www.devirtuoso.com/2009/08/beginners-guide-to-jquery-mouse-events/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 04:56:51 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=933</guid>
		<description><![CDATA[If you’re just starting out in jQuery, one of the most important things is to learn to make things interactive.  This tutorial will show the basics of working with the mouse in jQuery.

What We Will Be Making
To keep things simple, we’re going to make a tooltip that pops up when you roll over a link.  [...]]]></description>
			<content:encoded><![CDATA[<p>If you’re just starting out in jQuery, one of the most important things is to learn to make things interactive.  This tutorial will show the basics of working with the mouse in jQuery.</p>
<p><span id="more-933"></span></p>
<h2>What We Will Be Making</h2>
<p>To keep things simple, we’re going to make a tooltip that pops up when you roll over a link.  Also we’re going to make it so when a user clicks on the link, it displays a click message within the tooltip box.</p>
<div class="resources">
	 <a href="http://www.devirtuoso.com/Examples/Mouse-Events/example.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/Mouse-Events/"class="Example" target="_blank">Example</a>
</div>
<p><a href="http://www.devirtuoso.com/Examples/Mouse-Events/"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/08/image_thumb12.png" border="0" alt="image" width="363" height="101" /></a></p>
<p>&#160;</p>
<h2>HTML</h2>
<p>For us to make a tooltip we’re going to have some links to work with, and a container for our tooltip.  There is nothing too special here.  I placed the links in a header tag just to make the links a bit easier to see.</p>
<p>Here is the <strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Mouse Events<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-1">&lt;!-- Center Links--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;wrapper&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-1">&lt;!-- Links --&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;link&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Empty Link<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<a href="http://december.com/html/4/element/br.html"><span class="kw2">br</span></a> <span class="sy0">/</span>&gt;&lt;<a href="http://december.com/html/4/element/br.html"><span class="kw2">br</span></a> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc2">&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;http://www.google.com&quot;</span>&gt;</span>Link to Google<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-1">&lt;!-- Tooltip Container--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/span.html"><span class="kw2">span</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;toolTip&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/span.html"><span class="kw2">span</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>CSS</h2>
<p>The only thing that we really need to do here is make sure the tooltip is initially hidden, and give the tooltip a position of absolute so it can freely move around the page.  All of the other CSS is purely for aesthetics.</p>
<p>Here is the <strong>CSS</strong>:</p>
<div class="codecolorer-container css " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td><div class="css codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="coMULTI">/* Make everything Beautiful */</span> <br />
body<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#111</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#ddd</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">font-family</span><span class="sy0">:</span> Arial<span class="sy0">,</span> <span class="st0">&quot;MS Trebuchet&quot;</span><span class="sy0">,</span> <span class="kw2">sans-serif</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
a<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span><span class="re0">#777</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="coMULTI">/* Center Links */</span><br />
<span class="re0">#wrapper</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span><span class="re3">600px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span><span class="nu0">0</span> <span class="kw2">auto</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding-top</span><span class="sy0">:</span><span class="re3">100px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">text-align</span><span class="sy0">:</span> <span class="kw2">center</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Make sure tooltip is initially hidden,<br />
&nbsp; &nbsp;and can move around freely */</span><br />
<span class="re0">#toolTip</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span><span class="re3">5px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#577FAF</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span><span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span><span class="kw2">absolute</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>How Events Work</h2>
<p>If you’ve never used events before you might be wondering how they work.  They really aren’t that difficult.  If you think of them like events in real life they’re a little easier to understand.  For example, you set your alarm clock to go off at 6am.  This is an event, it’s going to let you know when this event happens.  Then it’s your choice to do what ever you want at that time…hit the snooze button or throw the alarm clock across the room.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="alarm clock" src="http://www.devirtuoso.com/wp-content/uploads/2009/08/image32.png" border="0" alt="alarm clock" width="320" height="267" /></p>
<p>In terms of jQuery, we might set up an event for when a mouse button is clicked.  jQuery will then run the function we assign to that event auto magically.  This function is generally referred to as the <strong>event Handler</strong>.</p>
<p>In jQuery there are a couple of ways to create an mouse event.</p>
<ul>
<li>$(‘#selector’).eventName( [function to call])</li>
<li>$(‘#selector’).bind(“eventName”, [function to call]);</li>
</ul>
<p>Where [function to call] is the function that will be called when the event is triggered, and  eventName is  the event you want to call (“click” or “mousemove”).  You can see a complete list of events in <a title="jQuery Events." href="http://docs.jquery.com/Events" target="_blank">jQuery’s Documentation</a>.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="trigger mouse event" src="http://www.devirtuoso.com/wp-content/uploads/2009/08/image33.png" border="0" alt="trigger mouse event" width="520" height="164" /></p>
<p>&#160;</p>
<h2>Building the Tooltip</h2>
<p>The first thing we’re going to handle is having the tooltip display whenever your mouse is moved over top of a link.  For this we’ll be using the event “mousemove” .</p>
<p>The event handler for the mouse event can be passed an argument.  This argument will hold an event object that holds a bunch of information that you can use.  Each event might have slightly different information in their object.  For example, the mousemove event has a pageX value and a pageY value.  These values tell the event handler what the mouse x and y co-ordinates are.  We’re going to use these co-ordinates to move our tooltip container to where the mouse is.</p>
<p>Here is the <strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="coMULTI">/*Once everything is loaded */</span> <br />
$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co2">/* Offset for the tool tip so it does not sit right on the cursor */</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">var</span> offsetX <span class="sy0">=</span> <span class="sy0">+</span><span class="nu0">40</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> offsetY <span class="sy0">=</span> <span class="sy0">-</span><span class="nu0">20</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co2">/*When the mouse is moved trigger the event */</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'a'</span><span class="br0">&#41;</span>.<span class="me1">mousemove</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co2">/*Put page coordinates in the tooltip*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#toolTip'</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="st0">&quot;Page Co-ordinates: &quot;</span><span class="sy0">+</span> event.<span class="me1">pageX</span><span class="sy0">+</span><span class="st0">' , '</span><span class="sy0">+</span>event.<span class="me1">pageY</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co2">/*Move the tool tip to where the mouse is. */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#toolTip'</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>top<span class="sy0">:</span>event.<span class="me1">pageY</span> <span class="sy0">+</span> offsetY<span class="sy0">+</span> <span class="st0">&quot;px&quot;</span><span class="sy0">,</span> left<span class="sy0">:</span> event.<span class="me1">pageX</span> <span class="sy0">+</span> offsetX <span class="sy0">+</span><span class="st0">&quot;px&quot;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co2">/* Display the tooltip */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#toolTip'</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="st0">&quot;fast&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>On the mousemove event we simply add text to the tooltip container, adjusted the top and left CSS properties of the tooltip container, then displayed it for the world to see.  You might have noticed an offset.  This is so the tool tip doesn’t sit directly on top of the mouse cursor.</p>
<p>At this point when we roll off of the link, the tooltip is still displaying.  Lets add an event for when the mouse rolls off of a link.</p>
<p><strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="coMULTI">/* When the mouse is off the link hide the tooltip */</span><br />
$<span class="br0">&#40;</span><span class="st0">'a'</span><span class="br0">&#41;</span>.<span class="me1">mouseout</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#toolTip'</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="st0">&quot;fast&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>We didn’t need the event object this time, simply because we didn’t need any information that it offers.  All we did was hide the tooltip when the mouseout event is triggered.</p>
<p>&#160;</p>
<h2>Click Event</h2>
<p>Now we’re going to tackle the click event.  The idea behind this is we’re going to give each link an index.  When the user clicks on each link it will display the index.  Since they’re links, the default action is to take you somewhere else.  We’re going to have to prevent this from happening, then do what we need to.</p>
<p><strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="coMULTI">/* Step through each link*/</span><br />
$<span class="br0">&#40;</span><span class="st0">&quot;a&quot;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span class="co2">/* i contains a count - 1st link = 0, 2nd link = 1, etc.*/</span> <br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp;<span class="co2">/*Bind click event, {index:i} can be retrieved by event object inside event handler */</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="st0">&quot;click&quot;</span><span class="sy0">,</span><span class="br0">&#123;</span>index<span class="sy0">:</span>i<span class="br0">&#125;</span><span class="sy0">,</span><span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co2">/* Prevents the link from taking us off the page. */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; event.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* event.data retrieves any parameters passed into the bind method.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;in this case the index. */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#toolTip'</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="st0">&quot;You Click link # &quot;</span><span class="sy0">+</span>event.<span class="me1">data</span>.<span class="me1">index</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>The each function gives us an id for each link.  You’ll noticed we used the bind function this time.  This is so we can pass an object in the argument e.g. {index:i} .  This argument can then be accessed via the event object.  So why go all the trouble of using an event object?  Can’t you just use the i variable from the each function?  In short you can’t use the i, because the i variable isn’t attached to each link.  If you did use it, it would display the current value of i, which would be the last links index., even if you clicked on the first link.</p>
<p>You might have noticed a function that the event object had called preventDefault().  This just prevents the default action of link so we can do what we need to and not be taken elsewhere.</p>
<p>&#160;</p>
<h2>Conclusion</h2>
<p>That’s it for now.  There are quite a few events out there that you can play with.  I recommend going to <a title="jQuery Events" href="http://docs.jquery.com/Events" target="_blank">jQuery’s website</a> and check them out.  It might also be a good idea to check out all the <a title="Event Methods and Properties" href="http://docs.jquery.com/Types/Event" target="_blank">methods and properties of the event object</a>.  I just scratched the surface with this tutorial, there is a lot more out there that can make you life easier, and your websites cooler.</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Mouse Events<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; color: #ddd;<br />
&nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; a{<br />
&nbsp; &nbsp; &nbsp; &nbsp; color:#777;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; #wrapper{<br />
&nbsp; &nbsp; &nbsp; &nbsp; width:600px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; padding-top:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; text-align: center;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; #toolTip{<br />
&nbsp; &nbsp; &nbsp; &nbsp; padding:5px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; background-color: #577FAF;<br />
&nbsp; &nbsp; &nbsp; &nbsp; display:none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position:absolute;<br />
&nbsp; &nbsp; }<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;wrapper&quot;</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;link&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Empty Link<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<a href="http://december.com/html/4/element/br.html"><span class="kw2">br</span></a> <span class="sy0">/</span>&gt;&lt;<a href="http://december.com/html/4/element/br.html"><span class="kw2">br</span></a> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp;<span class="sc2">&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;http://www.google.com&quot;</span>&gt;</span>Link to Google<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/span.html"><span class="kw2">span</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;toolTip&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/span.html"><span class="kw2">span</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;</span><br />
$(document).ready(function() {<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; var offsetX = +40;<br />
&nbsp; &nbsp; var offsetY = -20;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $('a').mousemove(function(event) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#toolTip').html(&quot;Page Co-ordinates: &quot;+ event.pageX+' , '+event.pageY);<br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#toolTip').css({top:event.pageY + offsetY+ &quot;px&quot;, left: event.pageX + offsetX +&quot;px&quot;})<br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#toolTip').show(&quot;fast&quot;);<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $('a').mouseout(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#toolTip').hide(&quot;fast&quot;);<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; $(&quot;a&quot;).each(function(i) {<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; $(this).bind(&quot;click&quot;,{index:i},function(event){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event.preventDefault();<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#toolTip').html(&quot;You Click link # &quot;+event.data.index);<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; <br />
});<br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources">
	 <a href="http://www.devirtuoso.com/Examples/Mouse-Events/example.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/Mouse-Events/"class="Example" target="_blank">Example</a>
</div>
<p>&#160;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/08/beginners-guide-to-jquery-mouse-events/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>3D Flying Text in jQuery</title>
		<link>http://www.devirtuoso.com/2009/08/3d-flying-text-in-jquery/</link>
		<comments>http://www.devirtuoso.com/2009/08/3d-flying-text-in-jquery/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 10:01:07 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=917</guid>
		<description><![CDATA[It’s just a matter of time before some creates a jQuery plug-in much like Papervision for Flash.&#160; Until then the 3D experiments in jQuery continue.&#160; Here is a tutorial that will show you how to make 3D flying text in jQuery.

What We Will Be Building
Here’s the plan. Build a jQuery component that takes the text [...]]]></description>
			<content:encoded><![CDATA[<p>It’s just a matter of time before some creates a jQuery plug-in much like Papervision for Flash.&#160; Until then the 3D experiments in jQuery continue.&#160; Here is <strong>a tutorial</strong> that will show you how to make <strong>3D flying text in jQuery</strong>.</p>
<p><span id="more-917"></span></p>
<h2>What We Will Be Building</h2>
<p>Here’s the plan. Build a jQuery component that takes the text from a &lt;ul&gt; and make it fly towards the screen at random intervals.&#160; The affect will look something like traveling through space, or a title sequence for some cheesy space flick.</p>
<p>&#160;</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/3D-Flying-Text/example.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/3D-Flying-Text/" target="_blank">Example</a> </div>
<p><a href="http://www.devirtuoso.com/Examples/3D-Flying-Text/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="3d Flying Text Sample" src="http://www.devirtuoso.com/wp-content/uploads/2009/08/image30.png" border="0" alt="3d Flying Text Sample" width="520" height="266" /></a> </p>
<p>&#160;</p>
<h2>Getting Started</h2>
<p>The first thing we’re going to need is some text to animate.&#160; We’re going to use a &lt;ul&gt; that has the alphabet in it, we might run the risk of the component looking like a scene from sesame street, but I think we’ll be okay this time.&#160; The html is pretty basic so I won’t go into to much detail.&#160; </p>
<p>Here is the <strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>3D Flying Text<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>A<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>B<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>C<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>D<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>E<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>F<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>G<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>H<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>I<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>J<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>K<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>L<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>M<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>N<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>O<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>P<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Q<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>R<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>S<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>T<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>U<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>V<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>W<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>X<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Y<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Z<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc-1">&lt;!-- Load jQuery --&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>The jQuery</h2>
<p>There isn’t much to this one.&#160; We’re basically going to step through each item in the list, check to see if it’s still on the screen, if it is, move it down and enlarge the text.&#160; Through the magic of perspective it looks like the letters are coming right towards us.</p>
<p>Here is the <strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">//Setup Arrays that will hold the x,y,z of each element.</span><br />
<span class="kw2">var</span> x <span class="sy0">=</span> <span class="kw2">new</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw2">var</span> y <span class="sy0">=</span> <span class="kw2">new</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw2">var</span> z <span class="sy0">=</span> <span class="kw2">new</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Get the list of items.</span><br />
<span class="kw2">var</span> items <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">'li'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Animate the items.</span><br />
<span class="kw2">function</span> animate<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Step through each item.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span>i <span class="sy0">=</span> items.<span class="me1">length</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//variables for movement. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> xVar <span class="sy0">=</span> <span class="nu0">50</span> <span class="sy0">+</span> x<span class="br0">&#91;</span>i<span class="br0">&#93;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// x value</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> yVar <span class="sy0">=</span> <span class="nu0">50</span> <span class="sy0">+</span> y<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">*</span> z<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">++;</span>&nbsp; <span class="co1">// y value, move towards bottom of screen</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> zVar <span class="sy0">=</span> <span class="nu0">10</span> <span class="sy0">*</span> z<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">++;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// z value, text get larger.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Check to see if text position is still on the screen.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// the #'s are %. &nbsp; 100 is far right or bottom, 0 is top or left.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// for z value it's the font size in %.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>xVar <span class="sy0">|</span> xVar <span class="sy0">&lt;</span> <span class="nu0">0</span> <span class="sy0">|</span> xVar <span class="sy0">&gt;</span> <span class="nu0">90</span><span class="sy0">|</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yVar <span class="sy0">&lt;</span> <span class="nu0">0</span> <span class="sy0">|</span> yVar <span class="sy0">&gt;</span> <span class="nu0">90</span> <span class="sy0">|</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zVar <span class="sy0">&lt;</span> <span class="nu0">0</span> <span class="sy0">|</span> zVar <span class="sy0">&gt;</span> <span class="nu0">1500</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//if it's off the screen randomly pick a starting place.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">=</span> Math.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> Math.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> <span class="nu0">2</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//if it's still on the screen apply the appropiate styles.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>items<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;position&quot;</span><span class="sy0">,</span> <span class="st0">&quot;absolute&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// make sure we can move the text around.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>items<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;top&quot;</span><span class="sy0">,</span> xVar<span class="sy0">+</span><span class="st0">&quot;%&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp;<span class="co1">// y value</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>items<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;left&quot;</span><span class="sy0">,</span> yVar<span class="sy0">+</span><span class="st0">&quot;%&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// x value</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>items<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;fontSize&quot;</span><span class="sy0">,</span> zVar<span class="sy0">+</span><span class="st0">&quot;%&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// font size (illusion of perspective.)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>items<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;opacity&quot;</span><span class="sy0">,</span><span class="br0">&#40;</span>zVar<span class="br0">&#41;</span><span class="sy0">/</span><span class="nu0">3000</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// fade in from the distance.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; setTimeout<span class="br0">&#40;</span>animate<span class="sy0">,</span> <span class="nu0">9</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
animate<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Just a couple of notes on speed.&#160; I initially tried using jQuery’s each() function but found a dramatic slowdown in comparison to the for loop.&#160; The each() method is great to work with, but if speed is an issue don’t bother using it.&#160; Also just another small thing, in the for loop I decremented each value (i—) instead of incrementing.&#160; This is also another speed boost that some people might not know about.&#160; It’s easier for your computer to process a for loop counting down then up.&#160; In this case there might not be a huge speed difference, but it is something to consider.</p>
<p>&#160;</p>
<h2>That’s all Folks</h2>
<p>That’s all there is to it.&#160; You can add some CSS to style things to make it pretty, but that isn’t necessary.</p>
<p>Here is all the code together:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>3D Flying Text<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background:#000;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; overflow:hidden;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding:0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; li{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color:#fff;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font:bold 13px Arial,sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; a{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text-decoration:none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>A<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>B<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>C<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>D<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>E<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>F<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>G<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>H<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>I<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>J<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>K<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>L<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>M<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>N<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>O<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>P<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Q<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>R<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>S<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>T<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>U<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>V<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>W<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>X<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Y<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Z<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
<br />
//Setup Arrays that will hold the x,y,z of each element.<br />
var x = new Array();<br />
var y = new Array();<br />
var z = new Array();<br />
<br />
//Get the list of items.<br />
var items = $('li');<br />
<br />
//Animate the items.<br />
function animate()<br />
{<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; //Step through each item.<br />
&nbsp; &nbsp; for(i = items.length - 1; i &gt;= 0; i--){<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; //variables for movement. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; var xVar = 50 + x[i] &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; // x value<br />
&nbsp; &nbsp; &nbsp; &nbsp; var yVar = 50 + y[i] * z[i]++;&nbsp; // y value, move towards bottom of screen<br />
&nbsp; &nbsp; &nbsp; &nbsp; var zVar = 10 * z[i]++; &nbsp; &nbsp; &nbsp; &nbsp; // z value, text get larger.<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; //Check to see if text position is still on the screen.<br />
&nbsp; &nbsp; &nbsp; &nbsp; // the #'s are %. &nbsp; 100 is far right or bottom, 0 is top or left.<br />
&nbsp; &nbsp; &nbsp; &nbsp; // for z value it's the font size in %.<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (!xVar | xVar <span class="sc2">&lt; <span class="nu0">0</span> | xVar &gt;</span> 90| <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yVar <span class="sc2">&lt; <span class="nu0">0</span> | yVar &gt;</span> 90 | <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zVar <span class="sc2">&lt; <span class="nu0">0</span> | zVar &gt;</span> 1500)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //if it's off the screen randomly pick a starting place.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x[i]= Math.random() * 2 - 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y[i] = Math.random() * 2 - 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z[i] = 2; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //if it's still on the screen apply the appropiate styles.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(items[i]).css(&quot;position&quot;, &quot;absolute&quot;); // make sure we can move the text around.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(items[i]).css(&quot;top&quot;, xVar+&quot;%&quot;); &nbsp;// y value<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(items[i]).css(&quot;left&quot;, yVar+&quot;%&quot;); // x value<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(items[i]).css(&quot;fontSize&quot;, zVar+&quot;%&quot;); // font size (illusion of perspective.)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(items[i]).css(&quot;opacity&quot;,(zVar)/3000); // fade in from the distance.<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; setTimeout(animate, 9);<br />
}<br />
<br />
animate();<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/3D-Flying-Text/example.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/3D-Flying-Text/" target="_blank">Example</a> </div>
<p>&#160;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/08/3d-flying-text-in-jquery/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
