动态HTML创作之二(滑动) |
| 普通滑动 把一系列连续的移动串起来,就形成了滑动,通过滑动可以建立各种滚动或者动画的效果。同时,我们还可以使用循环语句来使每一次移动很小的间隔,由此组成了一系列的运动效果。使用这种技术几乎可以建立任意想象得到的动画。 最基本的思想方法就是建立移动代码: block.xpos+=5 block.left=block.xpos 这段代码使每一次向右移动5个像素。然后,把这段代码粘贴到一个循环语句中: function slide() { if(block.xpos<300) { block.xpos+=5 block.left=block.xpos setTimeout("slide()",30) } } if语句用来决定何时中止动画。在上面的例子中,循环将在x定位达到300像素时停止,setTimeout()函数是建立循环的依据。也就是说,在一定的毫秒以后,它将执行双引号中的内容。因此上面这个函数将会每30毫秒重复执行一次。 我们具体一个例子来看: <HTML> <HEAD> <TITLE>DHTML Demo</TITLE> <script language="javascript"> <!-- ns4=(document.layers)?true:false ie4=(document.all)?true:false function init() { if(ns4) block=document.blockDiv if(ie4) block=blockDiv.style block.xpos=parseInt(block.left) } function slide() { if(block.xpos<300) { block.xpos+=5 block.left=block.xpos setTimeout("slide()",30) } } function restart() { block.xpos=50 block.left=block.xpos } function moveTo(obj,x,y) { obj.xpos=x obj.ypos=y obj.left=obj.xpos obj.top=obj.ypos } //--> </script> </HEAD> <BODY onLoad="init()"> <p> <a href="javascript:slide()">滑动</a> <a href="javascript:moveTo(block,50,100)">重新开始</a> </p> <div id="blockDiv" style="position:absolute;left:50;top:100;width:30"> <img src="../image/block.gif"> </div> </BODY> </HTML> 这个例子的演示效果是,当单击“滑动”后,对象会向右侧滑动到300像素的地方;当单击“重新开始”后,对象又回到原始的位置。 当然,要使得对象按照一定角度斜向移动有一些困难,需要同时改变“xpos(left)”和“ypos(top)”值。这里有一个斜向移动的例子: <HTML> <HEAD> <TITLE>DHTML Demo</TITLE> <script language="javascript"> <!-- ns4=(document.layers)?true:false ie4=(document.all)?true:false function init() { if(ns4) block=document.blockDiv if(ie4) block=blockDiv.style block.xpos=parseInt(block.left) block.ypos=parseInt(block.top) } function slide() { if(block.xpos<300) { block.xpos+=5 block.ypos+=5 block.left=block.xpos block.top=block.ypos setTimeout("slide()",30) } } function moveTo(obj,x,y) { obj.xpos=x obj.ypos=y obj.left=obj.xpos obj.top=obj.ypos } //--> </script> </HEAD> <BODY onLoad="init()"> <p> <a href="javascript:slide()">按一个角度斜向滑动</a> <a href="javascript:moveTo(block,50,100)">重新开始</a> </p> <div id="blockDiv" style="position:absolute;left:50;top:100;width:30"> <img src="../image/block.gif"> </div> </BODY> </HTML> 当单击“按一个角度斜向滑动”后,对象会向右下方移动。 按照给定的角度移动 这里,我们需要一些在高中里学过的知识:三角函数。通过这种函数形式,我们可以指定一个元素按照任何的角度移动。现在初始化对象,其中包含有角度的信息值,需要4个新的属性: object.angle=30 object.xinc=5*Math.cos(object.angle*Math.PI/180) object.yinc=5*Math.sin(object.angle*Math.PI/180) object.count=0 我们计算一下x和y的增量以决定每一次让对象沿垂直和水平方向移动多少距离。需要把角度值转换成弧度值: 弧度值=角度值*(3.1416/180)。“count”属性被用来决定循环多少次。if(block.count<25)表示函数将在执行25次以后停止。也就是说,这个对象将移动125像素单位。这个例子的完整形式如下: <HTML> <HEAD> <TITLE>DHTML Demo</TITLE> <script language="javascript"> <!-- ns4=(document.layers)?true:false ie4=(document.all)?true:false function init() { if(ns4) block=document.blockDiv if(ie4) block=blockDiv.style block.xpos=parseInt(block.left) block.ypos=parseInt(block.top) block.angle=30 block.xinc=5*Math.cos(block.angle*Math.PI/180) block.yinc=5*Math.sin(block.angle*Math.PI/180) block.count=0 } function slide() { if(block.count<25) { block.xpos+=block.xinc block.ypos-=block.yinc block.left=block.xpos block.top=block.ypos block.count+=1 setTimeout("slide()",30) } else block.count=0 } function restart() { block.count=0 moveTo(block,150,150) } function moveTo(obj,x,y) { obj.xpos=x obj.ypos=y obj.left=obj.xpos obj.top=obj.ypos } //--> </script> </HEAD> <BODY onLoad="init()"> <a href="javascript:slide()">滑动</a>- <a href="javascript:restart()">重新开始</a> <div id="blockDiv" style="position:absolute;left:150;top:150;width:30"> <img src="../image/block.gif"> </div> </BODY> </HTML> 当单击“滑动”后,对象就会按照事先给定的角度滑动,“重新开始”就会使对象回归初始的位置。 或许这种滑动方式还不是非常方便,因为每次如果需要改变角度,都需要重新编辑 HTML 源文件。因此,我们可以改变角度的工作放在页面上来做,这样,就显得非常灵活了。这个完整的程序如下: <HTML> <HEAD> <TITLE>DHTML Demo</TITLE> <script language="javascript"> <!-- ns4=(document.layers)?true:false ie4=(document.all)?true:false function init() { if(ns4) block=document.blockDiv if(ie4) block=blockDiv.style block.xpos=parseInt(block.left) block.ypos=parseInt(block.top) block.angle=0 block.xinc=5*Math.cos(block.angle*Math.PI/180) block.yinc=5*Math.sin(block.angle*Math.PI/180) block.count=0 } //在你移动之前,必须首先计算xinc和yinc的值 function start() { block.angle=document.changeangle.angletext.value block.xinc=5*Math.cos(block.angle*Math.PI/180) block.yinc=5*Math.sin(block.angle*Math.PI/180) slide() } function slide() { if(block.count<20) { block.xpos+=block.xinc block.ypos-=block.yinc block.left=block.xpos block.top=block.ypos block.count+=1 setTimeout("slide()",30) } else block.count=0 } function restart() { block.count=0 moveTo(block,150,150) } function moveTo(obj,x,y) { obj.xpos=x obj.ypos=y obj.left=obj.xpos obj.top=obj.ypos } //--> </script> </HEAD> <BODY onLoad="init()"> <form name="changeangle"> <p>输入一个角度并且单击“滑动”: <br><input name="angletext" type="text" size=4 value="0"> <input type="button" value="滑动" onClick="start()"> <input type="button" value="重置" onClick="restart()"></p> </form> <div id="blockDiv" style="position:absolute;left:150;top:150;width:30"> <img src="../image/block.gif"> </div> </BODY> </HTML> 在输入角度的文本框中,可以输入任何的角度值。 |