动态HTML创作之六(动画擦除)

我们在上面所做的剪切效果都是在瞬间完成的,有时候可能需要更为“柔和”的方式改变一个层的尺寸,那么我们现在就来讨论这种动画效果的剪切,即“擦除”效果。

当我们把前面提到的“clipBy()”命令加入一个时间循环函数时,就可以建立一种清楚的擦除效果。现在,首先建立“wipe()”函数。它的工作方法与前面提到的对象滑动有一些相似,只需建立一个循环函数不停地重新剪切层:

function wipe1() {

clipBy(block,0,5,0,0)

setTimeout("wipe1()",30)

}

这种循环不可能无限制地进行下去,因此,必须使擦除能够在需要的时候停止,于是需要检查一下边界是否已经达到了事先指定的值:

function wipe1() {

if(clipValues(block,'r')<200) {

clipBy(block,0,5,0,0)

setTimeout("wipe1()",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
}

function clipValues(obj,which) {
if(ns4) {
if(which=="t") return obj.clip.top
if(which=="r") return obj.clip.right
if(which=="b") return obj.clip.bottom
if(which=="l") return obj.clip.left
}
else if(ie4) {
var clipv=obj.clip.split("rect(")[1].split(")")[0].split("px")
if(which=="t") return Number(clipv[0])
if(which=="r") return Number(clipv[1])
if(which=="b") return Number(clipv[2])
if(which=="l") return Number(clipv[3])
}
}

function clipTo(obj,t,r,b,l) {
if(ns4) {
obj.clip.top=t
obj.clip.right=r
obj.clip.bottom=b
obj.clip.left=l
}
else if(ie4) obj.clip="rect("+t+"px "+r+"px "+b+"px "+l+"px)"
}

function clipBy(obj,t,r,b,l) {
if(ns4) {
obj.clip.top=clipValues(obj,'t')+t
obj.clip.right=clipValues(obj,'r')+r
obj.clip.bottom=clipValues(obj,'b')+b
obj.clip.left=clipValues(obj,'l')+l
}
else if(ie4) obj.clip="rect("+(this.clipValues(obj,'t')+t)+"px "
+(this.clipValues(obj,'r')+r)+"px "
+Number(this.clipValues(obj,'b')+b)+"px "
+Number(this.clipValues(obj,'l')+l)+"px)"
}

function wipe1() {
if(clipValues(block,'r')<200) {
clipBy(block,0,5,0,0)
setTimeout("wipe1()",30)
}
}

function wipe2() {
if(clipValues(block,'r')>50) {
clipBy(block,0,-5,0,0)
setTimeout("wipe2()",30)
}
}

//-->
</script>
</HEAD>

<BODY onLoad="init()">
<div id="blockDiv"
style="position:absolute;left:150;top:80;width:200;height:100;
clip:rect(0,50,100,0);background-color:#ff0000;
layer-background-color:#ff0000">
</div>
<p>
查看各边的剪切值:
<a href="javascript:alert(clipValues(block,'t'))">顶端</a>,
<a href="javascript:alert(clipValues(block,'r'))">右侧</a>,
<a href="javascript:alert(clipValues(block,'b'))">底端</a>,
<a href="javascript:alert(clipValues(block,'l'))">左侧</a>
</p>
<p> <a href="javascript:wipe1()">将右边界擦除至200</a>
<br><a href="javascript:wipe2()">将右边界擦除到50</a>
</p>
</BODY>
</HTML>
用户可以单击浏览器上面的“将右边界擦除至200”来查看运行的效果。

虽然剪切的结果与前面文章中的“瞬间”剪切一样,但是,执行的过程却大不相同。可以通过定义擦除的时间间隔来控制这种动态效果的速度。通过动态剪切的方法,可以令网页的浏览者在众多单一的网页中产生耳目一新的感觉。

在进行擦除的前后,都可以通过点击第一行中的“检查边界值”来获取当前的层所在的位置与尺寸。