动态基本教程第八节: 用 Clip 来剪裁 Layer 的可视区 | |
回顾我们已经学到了
这一节我们将告诉你如何来控制一个元素的可视区, 也就是说用这个技术 Clipping Layers
Clipping 的意思就是决定元素的哪个部位可以被看到. 就像一个模子一样. Clipping 的 CSS 语法是 clip:rect(top,right,bottom,left)
这里 top, right, bottom, left 的值全是 pixels. 注意它们的位置是固定的. 下面 <DIV ID="blockDiv" STYLE="position:absolute; left:50; top:80; width:100; height:70; clip:rect(-15, 15, 85, 85); background-color:#FF0000; layer-background-color:#FF0000;"> </DIV>
在上面这个例子中,
在上面这个例子, 有两个性质需要解释一下. background-color 是专为 ie4
你也可y以给 DIV 元素设置背景图象, background-image:URL(filename.gif) <DIV ID="blockDiv" STYLE="position:absolute; left:50; top:80; width:100; height:50; clip:rect(-10,110,60,-10); background-image:URL(filename.gif); layer-background-image:URL(filename.gif); repeat:no;} JavaScript 和 Clipping
我们已经知道了用 clipping 的四个值来决定一个元素的可视区. 同改变元 Netscape 的 Clipping: 在 Netscape, 你可以用下面这四个性质来取得 Clipping document.divName.clip.top document.divName.clip.right document.divName.clip.bottom document.divName.clip.left 比如你想要把 Clipping 的 top 显示在屏幕上, 你可以用 alert: alert(document.divName.clip.top) 你如果想改变 top 的值到 50 pixels, 你可以 document.divName.clip.top = 50 Internet Explorer 的 Clipping: IE 可以用一个性质得到所有四个 Clipping 的值, 比如 alert(divName.style.clip) 这句的结果将是 "rect(0px 50px 100px 0px)" 当你想改变 Clipping 的值的时候, 你也需要把这四个值一起改动. 烦! divName.style.clip = "rect(0px 100px 50px 0px)" 通用子程序 clipValues()这个子程序是用来得到其中一个 Clipping 的值的. 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]) } }
你只要告诉这个子程序哪个 layer 的哪条边, 它就能告诉你那条边的 alert(clipValues(block,"t")) 这里我们用了这样的表示法 "t" (top), "r" (right), "b" (bottom), "l" (left). 改变 Clip 值的通用子程序clipTo() 子程序: clipTo() 让你能重新 Clip 一个 Layer 到给定的值 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)" } 用它的时候, 你要给出 Layer 的名字和四个边的 Clip 的值, 比如 clipTo(block,0,100,100,0) clipBy() 子程序: clipBy() 可以让你相对于当前的 Clip 区域增减 Clip 的四个边 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)" } 比如你想稍微增大 right 和 bottom 边的值, 你可以 clipBy(block,0,10,5,0) 动画 Clipping (Wiping)
所谓 wiping 就是连续相对改变 clipping 区域. 下面这个子程序就是往右边 function wipe1() { clipBy(block,0,5,0,0) setTimeout("wipe1()",30) } 我们还得加上个条件来停止 wiping, function wipe1() { if (clipValues(block,'r')<200) { clipBy(block,0,5,0,0) setTimeout("wipe1()",30) } } |
|
![]() ![]() ![]() ![]() |