|  QQlan
 职务:版主
 等级:1
 金币:1.0
 发贴:158
 注册:2000/9/19 10:35:21
 
 | 
                            
                            #12001/3/21 3:38:38 
                                  剪切层  翻译: QQLan 剪切主要指层的哪些部分可见. 你需要理解修剪值(clip values) , width 和height的区别.  Width和Height只是告诉browser如何把HTML元素包裹在里面. 但是, 它是窗口穿透层来浏览-- 它不具有层的属性和效果(定位于左边或者上面, 宽度,  高度, 是否可见, 等等) Clipping的区域被定义为由4条边组成的矩形(top, right, bottom, left).  每一条边都可以剪切掉部分的可见层, 或者增加可视空间. 所有的剪切值依赖于层本身-- 依赖层的top-left位置. [img]http://www.dansteinman.com/dynduo/images/diagram-clip.gif  [/img] clipping在CSS中的语法是:clip:rect(top,right,bottom,left) 其中top, right, bottom, left的值基于pixels. 别忘记按照他们的顺序进行-- 不然它会使你的操作非常混乱. 这是一个使用clipping定义可视区域的DIV tag: 
 
 
 本例中, 创建了10像素的边框围绕在层的边缘.因为clip top 是 -10, clip left 是 -10. 这个clip right是110 (比层的宽度多10 pixels) , clip bottom是60 (比层的高度多10 pixels). 我使用了一些CSS属性在里面. background-color (for ie4) 和[layer-background-color] (for NS) 来给你的层着色(任何你喜欢的颜色). 这样做能使我们非常清楚的看到剪切/增加前后的效果. 通常我们定义层的时候不必使用height,但是, 如果我们要用到clipping, 就应该给层定义高度,  不然, IE不会给使用clip多出来部分着色. 同时你也可以在你的层上使用背景图. CSS中, 在IE中显示层的背景: background-image: URL (filename.gif) ; 在NS中显示背景: layer-background-image: URL (filename.gif) . 为了使背景图在NS中正常显示, 我们还要增加一个CSS属性 : repeat:no  , 下面就是完整的使用CSS定义层的背景. 
  javascript 和 Clipping  一旦clip了层, 我们就能使用javascript获得或者改变clip值 - 就象我们已经学过的得到元素的精确定位一样.Clipping in Netscape 在NS中, 你可以获得或者改变任何一个clip的值. document.divName.clip.top
 document.divName.clip.right
 document.divName.clip.bottom
 document.divName.clip.left
 
 弹出一个message,显示你所写的clip值.alert(document.divName.clip.top) 然后把原来的top clip的值改为50 pixels.document.divName.clip.top = 50  Clipping in Internet Explorer IE里, 你可以在同一时间获得全部的剪切值. 例如, 你可以弹出一个对话框显示clip值. <#336699>alert(divName.style.clip) #> 他将返回已定义的clip值的string. 以下是返回值示例:"rect(0px 50px 100px 0px)" IE里, 不能象在Netscape那样仅仅改变一条边的值实现-- 你必须一次性重新定义所有的clip值:divName.style.clip = "rect(0px 100px 50px 0px)" IE 4在clip方面显得有一点笨拙. 你可以使用我写的 generic function 在两个browser里检测clip值.The Clip values() Function 该 clip values() function 能够获得每一条边的剪切值. 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])
 }
 }
 
 
 所要做的, 只是确定你需要哪个层(被定义为指针变量), 和哪条边的剪切值. 例如: 一旦我们定义指针变量为"blockDiv"层, 将得到包含top clip值的对话框.alert(clipvalues(block,"t")) 只要写你所需要的边的首字母 - "t" (top), "r" (right), "b" (bottom), "l" (left).  范例: www.dansteinman.com/dynduo/examples/clipping1.html 改变修剪值 我写了2个generic functions非常容易的改变clip值.The clip To() Function clip To() 允许你定制层. 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/object, 和需要修剪的各条边的值.clipTo(block,0,100,100,0)  The clipBy() Function: clip By() 允许你根据给定的象素值移动层.  从当前的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)"
 }
 
 和clipTo() 相似,  你只要指出你想剪切的各边的值.:clipBy(block,0,10,5,0) 上面的例子向右增加了10 Pixels,  向下增加了5 pixels. 使用Netscape 浏览效果更好, 是因为他对于layer 的 background color的定义方法 --  无论是否被剪切他总是显示该层的颜色. 但是IE中如果你clip超出该层的边界(扩展一条边), 你将看不到该层的边缘.动态剪切 (Wipping) 循环clipBy() 命令, 你将会看到你从没见过的, 灵巧的Wiping效果.  我想说的是,  创建你自己的wipe() function 将使一切更容易. 用和写slides相同的风格来做,  创建一个循环function来re-clips该层. function wipe1() {
 clipBy(block,0,5,0,0)
 setTimeout("wipe1()",30)
 }
 
 为了停止wipe, 我们只需要校验该层的边时候达到了理想值. function wipe1() {
 if (clipvalues(block,'r')<200) {
 clipBy(block,0,5,0,0)
 setTimeout("wipe1()",30)
 }
 }
 
 范例: www.dansteinman.com/dynduo/examples/clipping3.html  (使用 wipes) ------------------------------------------------------------------ 5DMedia 版权所有, 转载请注明出处!
                                
                                
                                
                            
                                
                                    编辑历史:[这消息被QQlan编辑过(编辑时间2001-03-21 03:46:42)]
 
 |