JavaScript DHTML/Ajax Layer/Bezier
Bezier Path Animation
<source lang="html4strict">
http://dynapi.sourceforge.net/ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 <html> <head> <title>DynAPI Examples - Bezier Path Animation</title> <script language="JavaScript" src="./dynapisrc/dynapi.js"></script> <script language="Javascript"> dynapi.library.setPath("./dynapisrc/"); dynapi.library.include("dynapi.api"); dynapi.library.include("dynapi.debug"); dynapi.library.include("dynapi.fx.Thread"); dynapi.library.include("dynapi.fx.Bezier"); </script> <script language="Javascript"> var path; var dots = []; var cps = []; function drawBezier() {
clearPage(); var controlPoints = eval(document.b.cp.value); var steps = parseInt(document.b.steps.value); // the path includes starting and ending points // results in total of steps+1 points along path path = Bezier(controlPoints, steps); for (var i=0;i<controlPoints.length/2;i++) { var x = controlPoints[i*2]; var y = controlPoints[i*2+1]; var color = "red"; if (i==0 || i==controlPoints.length/2-1) color = "yellow" if (!cps[i]) cps[i] = dynapi.document.addChild(new DynLayer("",x-2,y-2,5,5,color)); else { cps[i].setLocation(x-2,y-2); cps[i].setBgColor(color); } cps[i].setVisible(true); } for (var i=0;i<path.length/2;i++) { var x = path[i*2]; var y = path[i*2+1]; if (!dots[i]) dots[i] = dynapi.document.addChild(new DynLayer("",x,y,2,2,"black")); else { dots[i].setLocation(x-2,y-2); } dots[i].setVisible(true); }
} var playblock = dynapi.document.addChild(new DynLayer("",0,0,15,15,"red")); playblock.setVisible(false); var pathanim = new Thread(playblock); pathanim.loop = true; function startAnim() {
if (path) { playblock.setVisible(true); var speed = parseInt(document.b.speed.value); pathanim.sleep(speed); pathanim.play(path); }
} function stopAnim() {
playblock.setVisible(false); pathanim.stop();
} function clearPage() {
for (var i=0;i<dynapi.document.children.length;i++) { var c = dynapi.document.children[i]; if (c!=playblock) c.setVisible(false); }
} function setCP(cp) {
document.b.cp.value = cp; drawBezier(); startAnim();
} var t="drawBezier();\nstartAnim();\nthis.watch("playblock.getX()");\n" +"this.watch("playblock.getY()");\n" +"this.switchMode("watch");"; dynapi.debug.setEvaluate(t);
</script>
</head>
<body bgcolor="#999999">
<form name=b>
Control Points: <input type=text name="cp" value="[200,150, 200,400, 250,100, 500,300]" size=50>
try these <input type=button value="1" onclick="setCP("[200,150, 200,150, 200,150, 400,150, 400,150, 400,150]");">
<input type=button value="2" onclick="setCP("[200,150, 200,150, 400,300]");">
<input type=button value="3" onclick="setCP("[200,200, 400,200, 400,400, 200,400, 200,200]");">
<input type=button value="4" onclick="setCP("[200,200, 200,300, 300,100, 500,200, 300,400, 500,300]");">
Steps: <input type=text name="steps" value="25" size=4>
Speed: <input type=text name="speed" value="40" size=4>ms
<input type=button value="Draw" onclick="drawBezier()">
<input type=button value="Clear Page" onclick="clearPage()">
<input type=button value="Start Animation" onclick="startAnim()">
<input type=button value="Stop Animation" onclick="stopAnim()">
</form>
</body>
</html>
</source>
<A href="http://www.wbex.ru/Code/JavaScriptDownload/dynapi.zip">dynapi.zip( 791 k)</a>