<html> <head> <title>DOM, CSS and Fonts - Sample Code: Animating Fonts with DOM</title> <script> //////////////////////////////////////////////////////////////////////////////// // Produced by Marcio Galli for Netscape Communications. // Uses DOM 1 to dynamically create a set of text elements using // the same content for all the texts but with different sizes. // Then an animation loop uses Math.cos() and Math.sin() functions // to start a wave effect. // // References: // // http://www.mozilla.org/docs/dom/technote/tn-dom-table/index.html // http://dmoz.org/Computers/Programming/Languages/JavaScript/W3C_DOM/ // http://www.geckonnection.com // //********************************************************************** // This is the default string to create and animate. // You can change this before calling q1() to make it // dynamic with your customization. // var defaultString="........................."; parentID="area"; // This is the div element where all text will be created. vala=160; // Initial color value that will be used to red and green color channels. valc=255; // Initial color value that will be used to the blue color channel. cc1=0; // Aux value to calculate color. cc2=0; // Aux value to calculate color. fontsize=70; // Font size. posleft=120; // Left position of the div that contains the texts. postop=50; // Top position of the div that contains the texts. //////////////////////////////////////////////////////////////////////////////////////////////// // Creating all text dynamically with DOM Level 1. // Use of getElementById, createElement, createTextNode, setAttribute and // appendChild. See more info at www.dmoz.org at W3C DOM category. // function q1() { // For statement to create 7 texts. for(i=0;i<7;i++) { // Each text is created inside the parentID div element. node=document.getElementById(parentID); // Creates the DIV element. beforediv=document.createElement("DIV"); // cc1 and cc2 values that will be used to generate the color values. cc1=255*(i/11); cc2=160*(i/11); gfx1=parseInt(vala-cc2); // Original color intensity value minus cc2. gfx2=parseInt(valc-cc1); // Original color intensity value minus cc1. // Creates the style attributes string. str="position:absolute;top:"+postop+"px;left:"+posleft+"px;color:rgb("+gfx1+","+gfx1+","+gfx2+");width:260px;height:100px;font-size:"+fontsize+"pt;"; // Sets the style attribute using str as its value. if (navigator.userAgent.indexOf("Gecko")>-1) beforediv.setAttribute("style",str); else beforediv.style.cssText = str; // Sets the id attribute using "object"+i as its value. beforediv.setAttribute("id","object"+i); // Creates the text node. newText=document.createTextNode(defaultString); // Appends the text node in the new div element. beforediv.appendChild(newText); // Appends the new div element in the node object (div id="area"). node.appendChild(beforediv); // Sets attributes to the next iteration. fontsize+=2; posleft+=5; postop-=(3-((i/20)*2)); } // Call to start the wave animation effect. setTimeout("a3danimation()",100); } //////////////////////////////////////////////////////////////////////////////////////// // Variables used as parameters for the a3danimation function. // ox=100; // Reference parameter for the initial left position. oy=100; // Reference parameter for the initial top position. pi=3.141516*2; // Approximation of the PI value. ccounter=0; // Animation counter. ww=10; // Parameter for the animation. //////////////////////////////////////////////////////////////////////////////////////////////// // Wave Animation // function a3danimation() { ww-=.1; // ww parameter decreases slowly. ccounter++; // counter increases by one. // Animation has 350 steps. In the end the animation starts again - see else // statement... // if(ccounter<350) { // This for statement changes the position of the 7 div areas that contain the text. for(i=0;i<7;i++) { // Calculates the posx and posy position based on sine and cosine functions and // pi, ccounter, i and ww parameters. // pis=pi*(ccounter/70)+(i/ww); posx=i*10+ox-20+(Math.cos(pis)*5*i*ww/20); posy=oy+(Math.sin(pis)*10*i*ww/5); // Sets the left and top position for each object based on i value. document.getElementById("object"+i).style.left=posx+"px"; document.getElementById("object"+i).style.top=posy+"px"; } // Call a3danimation again... setTimeout("a3danimation()",30); } else { // Resets animation parameters... ccounter=0; ww=10; // Call a3danimation again... setTimeout("a3danimation()",30); } } </script> </head> <body onload="q1()" bgcolor="#a0a0ff" text="white"> <!-- This is the area in which the text elements will be created. --> <div id="area" style="position:absolute;left:100px;top:050px;color:rgb(0,0,255)"> </div> </body> </html>