The code which produces the above is:
<!-- This script came from the public archives of JavaScript Planet at http://www.js-planet.com --> <!-- For more scripts, tutorials, links, discussion forums, help, or anything else JavaScript, --> <!-- Please visit JavaScript Planet at http://www.js-planet.com. Please keep this header intact. --> <body bgcolor=white text=black> <SCRIPT> // Ver .91 Jan 17 1998 ////////////////////////////////////////////////////////////// // // Copyright 1997 Jeremie // Free for public non-commercial use and modification // as long as this header is kept intact and unmodified. // Please see http://www.jeremie.com for more information // or email webdev@jeremie.com with questions/suggestions. // /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// /////////////// Public Morphing Function ////////////////////// /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// /////// to do items/additions/notes // // I didnt have time to "fully" comment this throughout, so // please feel free to ask me to explain anything. // //////////////////////////// //// this is the main public function //// takes the element to morph, time between steps, //// # of steps, style replacement, and JS code to execute when done function morph(e,wait,steps,style,done){ if(e.morphing){ return; } e.morphing = true; e.step = 0; e.done = steps; e.wait = wait; e.morphDone = done; // initialize the given element for the process // save some temporary variables within it var attribs = _eat_attrib(style); if(attribs["top"] != null){ e.deltaTop = Math.round(Number((attribs["top"] - e.style.posTop) / steps)); e.finalTop = attribs["top"]; }else{ e.deltaTop = null; e.finalTop = e.style.posTop; } if(attribs["left"] != null){ e.deltaLeft = Math.round(Number((attribs["left"] - e.style.posLeft) / steps)); e.finalLeft = attribs["left"]; }else{ e.deltaLeft = null; e.finalLeft = e.style.posLeft; } if(attribs["height"] != null){ e.deltaHeight = Math.round(Number((attribs["height"] - e.style.posHeight) / steps)); e.finalHeight = attribs["height"]; }else{ e.deltaHeight = null; e.finalHeight = e.style.posHeight; } if(attribs["width"] != null){ e.deltaWidth = Math.round(Number((attribs["width"] - e.style.posWidth) / steps)); e.finalWidth = attribs["width"]; }else{ e.deltaWidth = null; e.finalWidth = e.style.posWidth; } // group all of the coloring elements together e.colors = new Array(); for(attrib in attribs){ // check each one individually to kludge // if we need to use a "safe" name for the css attribute if(attrib == "background"){ e.colors[e.colors.length] = new Array(); e.colors[e.colors.length - 1].name = attrib; e.colors[e.colors.length - 1].safename = attrib; } if(attrib == "color"){ e.colors[e.colors.length] = new Array(); e.colors[e.colors.length - 1].name = attrib; e.colors[e.colors.length - 1].safename = attrib; } if(attrib == "border-color"){ e.colors[e.colors.length] = new Array(); e.colors[e.colors.length - 1].name = attrib; e.colors[e.colors.length - 1].safename = "borderColor"; } } for(var i=0;i<e.colors.length;i++){ var rgb = _eat_rgb(attribs[e.colors[i].name]); var prergb = _eat_rgb(e.style[e.colors[i].safename]); e.colors[i].delta = _eat_rgb(attribs[e.colors[i].name]); e.colors[i].finish = _eat_rgb(attribs[e.colors[i].name]); e.colors[i].delta["red"] = Math.round(Number((rgb["red"] - prergb["red"]) / steps)); e.colors[i].delta["green"] = Math.round(Number((rgb["green"] - prergb["green"]) / steps)); e.colors[i].delta["blue"] = Math.round(Number((rgb["blue"] - prergb["blue"]) / steps)); } // fire the first morphing step setTimeout("_morphing(document.all." + e.id + ")", wait); } ///////////////////////////// ///////////////////////////// //// private function that does the work of morphing the element function _morphing(e){ e.step++; if(e.deltaTop!=null){ e.style.posTop += e.deltaTop; } if(e.deltaLeft!=null){ e.style.posLeft += e.deltaLeft; } if(e.deltaHeight!=null){ e.style.posHeight += e.deltaHeight; } if(e.deltaWidth!=null){ e.style.posWidth += e.deltaWidth; } for(var i=0;i<e.colors.length;i++){ var rgb = _eat_rgb(e.style[e.colors[i].safename]); e.style[e.colors[i].safename] = "rgb(" + (e.colors[i].delta["red"] + rgb["red"]) + "," + (e.colors[i].delta["green"] + rgb["green"]) + "," + (e.colors[i].delta["blue"] + rgb["blue"]) + ")"; } // do special things when we are done if(e.step == e.done){ if(e.deltaTop != null) e.style.posTop = e.finalTop; if(e.deltaLeft != null) e.style.posLeft = e.finalLeft; if(e.deltaWidth != null) e.style.posWidth = e.finalWidth; if(e.deltaHeight != null) e.style.posHeight = e.finalHeight; for(var i=0;i<e.colors.length;i++){ e.style[e.colors[i].safename] = "rgb(" + (e.colors[i].finish["red"] + rgb["red"]) + "," + (e.colors[i].finish["green"] + rgb["green"]) + "," + (e.colors[i].finish["blue"] + rgb["blue"]) + ")"; } e.morphing = false; eval(e.morphDone); }else{ setTimeout("_morphing(document.all." + e.id + ")", e.wait); } return; } ////////////////// //// util for element attribute parsing //// returns an array of all of the keys = values function _eat_attrib(str){ var chunks = new Array(); var all = new Array(); chunks=str.split(";"); for(var i=0;i<chunks.length;i++){ var tmpA = new Array(); tmpA=chunks[i].split(":"); all[tmpA[0]]=tmpA[1]; } return all; } //////////////////// ////////////////// //// util for style rgb(#,#,#) parsing //// returns an array of red/green/blue = number function _eat_rgb(str){ var all = new Array(); var a = str.indexOf("("); var b = str.indexOf(")"); str = str.substring(a + 1, b); var tmpA = str.split(","); all["red"]=Number(tmpA[0]); all["green"]=Number(tmpA[1]); all["blue"]=Number(tmpA[2]); return all; } //////////////////// </SCRIPT> <SPAN ID="test" STYLE="border:solid;border-width:5;border-color:rgb(0,0,0);color:rgb(255,255,255);position:absolute;top:0;left:0;width:400;height:400;overflow:hidden;background:rgb(0,0,255);"> this is some <B>text</B> that I am putting inside of here, watch me CHANGE :) </SPAN> <SCRIPT> function rander(){ var top = Math.round(Math.random() * 400); var left = Math.round(Math.random() * 600); var width = Math.round(Math.random() * 200); var height = Math.round(Math.random() * 200); var r = Math.round(Math.random() * 255); var g = Math.round(Math.random() * 255); var b = Math.round(Math.random() * 255); var background = "rgb(" + r + "," + g + "," + b + ")"; var r = Math.round(Math.random() * 255); var g = Math.round(Math.random() * 255); var b = Math.round(Math.random() * 255); var borderColor = "rgb(" + r + "," + g + "," + b + ")"; var r = Math.round(Math.random() * 255); var g = Math.round(Math.random() * 255); var b = Math.round(Math.random() * 255); var color = "rgb(" + r + "," + g + "," + b + ")"; morph(document.all.test,30,20,"top:" + top + ";left:" + left + ";width:" + width + ";height:" + height + ";background:" + background + ";border-color:" + borderColor + ";color:" + color + ";","rander();"); } rander(); </SCRIPT>