Animation along Straight Line : Animation : GUI Components JAVASCRIPT DHTML TUTORIALS


JAVASCRIPT DHTML TUTORIALS » GUI Components » Animation »

 

Animation along Straight Line



 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/tr/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- 
     Example File From "JavaScript and DHTML Cookbook"
     Published by O'Reilly & Associates
     Copyright 2003 Danny Goodman
-->
<html>
<head>
<title>Recipe 13.9</title>
<style rel="stylesheet" id="mainStyle" type="text/css">
html {background-color:#cccccc}
body {background-color:#eeeeee; font-family:Tahoma,Arial,Helvetica,sans-serif; font-size:12px;
    margin-left:15%; margin-right:15%; border:3px groove darkred; padding:15px}
h1 {text-align:right; font-size:1.5em; font-weight:bold}
h2 {text-align:left; font-size:1.1em; font-weight:bold; text-decoration:underline}
.buttons {margin-top:10px}

</style>

<script language="JavaScript" type="text/javascript">
// animation object holds numerous properties related to motion
var anime;

// initialize default anime object
function initAnime() {
    anime = {elemID:""
             xCurr:0
             yCurr:0
             xTarg:0
             yTarg:0
             xStep:0
             yStep:0,
             xDelta:0,
             yDelta:0,
             xTravel:0,
             yTravel:0,
             vel:1
             pathLen:1
             interval:null
            };
}

// stuff animation object with necessary explicit and calculated values
function initSLAnime(elemID, startX, startY, endX, endY, speed) {
    initAnime();
    anime.elemID = elemID;
    anime.xCurr = startX;
    anime.yCurr = startY;
    anime.xTarg = endX;
    anime.yTarg = endY;
    anime.xDelta = Math.abs(endX - startX);
    anime.yDelta = Math.abs(endY - startY);
    anime.vel = (speed? speed : 1;
    // set element's start position
    document.getElementById(elemID).style.left = startX + "px";
    document.getElementById(elemID).style.top = startY + "px";
    // the length of the line between start and end points
    anime.pathLen = Math.sqrt((Math.pow((startX - endX)2)) 
    (Math.pow((startY - endY)2)));
    // how big the pixel steps are along each axis
    anime.xStep = parseInt(((anime.xTarg - anime.xCurr/ anime.pathLen* anime.vel);
    anime.yStep = parseInt(((anime.yTarg - anime.yCurr/ anime.pathLen* anime.vel);
    // start the repeated invocation of the animation
    anime.interval = setInterval("doSLAnimation()"10);
}

// calculate next steps and assign to style properties
function doSLAnimation() {
    if ((anime.xTravel + anime.xStep<= anime.xDelta && 
        (anime.yTravel + anime.yStep<= anime.yDelta) {
        var x = anime.xCurr + anime.xStep;
        var y = anime.yCurr + anime.yStep;
        document.getElementById(anime.elemID).style.left = x + "px";
        document.getElementById(anime.elemID).style.top = y + "px";
        anime.xTravel += Math.abs(anime.xStep);
        anime.yTravel += Math.abs(anime.yStep);
        anime.xCurr = x;
        anime.yCurr = y;
    else {
        document.getElementById(anime.elemID).style.left = anime.xTarg + "px";
        document.getElementById(anime.elemID).style.top = anime.yTarg + "px";
        clearInterval(anime.interval);
    }
}


</script>
</head>
<body style="height:400px;"  onload="initAnime()">
<h1>Straight-Line Animation</h1>
<hr />
<form>
<input type="button" value="Left-to-Right" 
onclick="initSLAnime('block', 100, 200, 500, 200, 5)">
<input type="button" value="Diagonal" 
onclick="initSLAnime('block', 100, 200, 500, 500, 20)">
</form>

<div id="block" style="position:absolute; top:200px; left:100px; height:200px; width:200px; background-color:orange"></div>

</body>
</html>

<!-- 
 function animatePolygon(elemID) {
    // prepare anime object for next leg
    initAnime();
    // create array of coordinate points
    var coords = new Array()
    coords[0[200200100400];
    coords[1[100400300400];
    coords[2[300400200200];
    // pass next coordinate group in sequence based on anime.next value
    if (anime.next < coords.length) {
        initSLAnime(elemID, coords[anime.next][0], coords[anime.next][1]
        coords[anime.next][2], coords[anime.next][3]10);
        // increment for next leg
        anime.next++;
    else {
        // reset 'next' counter after all legs complete
        anime.next = 0;
    }
}

-->


           
       



-

Leave a Comment / Note


 
Verification is used to prevent unwanted posts (spam). .

Follow Navioo On Twitter

JAVASCRIPT DHTML TUTORIALS

 Navioo GUI Components
» Animation