Chinaunix首页 | 论坛 | 博客
  • 博客访问: 420809
  • 博文数量: 155
  • 博客积分: 2590
  • 博客等级: 少校
  • 技术积分: 2161
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-25 09:33
文章分类

全部博文(155)

文章存档

2015年(1)

2014年(2)

2013年(55)

2012年(97)

分类: Web开发

2013-02-19 17:59:13

首先再次详细解释一下JS中窗口和网页的几种尺寸属性的含义 
document.body.clientWidth(网页可见区域宽):是指浏览器显示网页的区域宽度,不包括浏览器的边框宽度和垂直滚动条的宽度。大小随着浏览器的窗口大小而改变。 
document.body.clientHeight(网页可见区域高):是指浏览器显示网页的区域所能看到的高度,不包括浏览器的边框宽度和水平滚动条的高度。大小随着浏览器的窗口大小而改变。 
document.body.scrollTop(网页被卷去的高):是指拉动垂直滚动条时网页上面被地址栏及菜单栏遮盖着的部分的高。 
document.body.scrollLeft(网页被卷去的左):是指拉动水平滚动条时网页左面被左边线遮盖着的部分的宽。 
现在我们来分析一下程序该如何实现: 

第一步我们要实现的是使层在弹出时绝对居中不去考虑是否有滚动条的情况。 
1.计算出层距离显示区域左边和上边的位置 
注意:divId指的是所要居中的层,divId.clientWidth为其宽度!@ 
var divId = document.getElementById("xxx"); 
var v_left=(document.body.clientWidth-divId.clientWidth)/2; 
var v_top=(document.body.clientHeight-divId.clientHeight)/2; 
2.把得到的值重新赋给DIV的left和top属性 
divId.style.left=v_left; 
divId.style.top=v_top; 
说明:divId为DIV标签的id值 
这样这个层就是居中显示的了。 
第二步我们要实现的是使在拖动滚动条的情况下弹出的层也能居中。 
其实很简单我们只要把拖动的宽度和高度加到前面计算出来的左边距和上边距中就OK 了。 
v_left+=document.body.scrollLeft; 
v_top+=document.body.scrollTop; 
3.把得到的值重新赋给DIV的left和top属性 
divId.style.left=v_left; 
divId.style.top=v_top; 
这样显示出来就是居中的了。 
完整代码如下:

 

Java代码:  
  1. public "-//w3c//dtd html 4.0 transitional//en">     
  2.      
  3.      
  4. 弹出的层居中显示     
  5. "generator" content="editplus">     
  6. "author" content="">     
  7. "keywords" content="">     
  8. "description" content="">     
  9. "javascript" type="text/javascript">     
  10. function divcenter()     
  11. {     
  12. var divId=document.getElementById('mxh');     
  13. divId.style.left=(document.body.clientWidth-divId.clientWidth)/2+document.body.scrollLeft;     
  14. divId.style.top=(document.body.clientHeight-divId.clientHeight)/2+document.body.scrollTop;     
  15. }     
  16.      
  17.      
  18.   
  19.      
  20. 100%>     
  21. "divcenter()">test     
  22. "divcenter()">test     
  23. "divcenter()">test     
  24. "divcenter()">test     
  25. "divcenter()">test     
  26. "divcenter()">test     
  27. "divcenter()">test     
  28. "divcenter()">test     
  29. "divcenter()">test     
  30. "divcenter()">test     
  31. "divcenter()">test     
  32. "divcenter()">test     
  33. "divcenter()">test     
  34. "divcenter()">test     
  35. "divcenter()">test     
  36. "divcenter()">test     
  37. "divcenter()">test     
  38. "divcenter()">test     
  39. "divcenter()">test     
  40. "divcenter()">test     
  41. "divcenter()">test     
  42. "divcenter()">test     
  43. "divcenter()">test     
  44. "divcenter()">test     
  45. "divcenter()">test     
  46. "divcenter()">test     
  47. "divcenter()">test     
  48. "divcenter()">test     
  49. "divcenter()">test     
  50. "divcenter()">test     
  51. "divcenter()">test     
  52. "divcenter()">test     
  53. "divcenter()">test     
  54. "divcenter()">test     
  55. "divcenter()">test     
  56. "divcenter()">test     
  57. "divcenter()">test     
  58. "divcenter()">test     
  59. "divcenter()">test     
  60. "divcenter()">test     
  61. "divcenter()">test     
  62. "divcenter()">test     
  63. "divcenter()">test     
  64. "divcenter()">test     
  65. "divcenter()">test     
  66. "divcenter()">test     
  67. "divcenter()">test     
  68. "divcenter()">test     
  69. "divcenter()">test     
  70. "divcenter()">test     
  71. "divcenter()">test     
  72. "divcenter()">test     
  73. "divcenter()">test     
  74. "divcenter()">test     
  75. "divcenter()">test     
  76. "divcenter()">test     
  77.      
  78. "position:absolute;left:200px;top:30px;width:200px;height:200px;background -color:navy;border:2px">我是居中显示的了。
     
  •      
  •  
  • 如果你想在拖动滚动条或是窗口重置大小时,层也能居中显示的话,可以在body的属性里面加上onresize="divcenter();"和 onscroll="divcenter();"就OK了,不过可能显示的效果不是很好,特别是在拖动滚动条时的效果可能是一擅一擅的,忒不爽。 
    注意:

    运行后没有达到预期效果,输出 document.body.scrollTop 的值一看,一直都是 0。一翻折腾,原来是 DTD 的问题,要是页面直接用 开头的话就没有问题了。但是要符合 web 标准,DTD 当然是不能少的。

    如果有 DTD 时用,那就用 document.documentElement.scrollTop 代替 document.body.scrollTop 就可以了。

    我在项目上使用的代码:

    原文参考自站长网:

    Html代码:  
    1. function sc1(DivId) {  
    2.            //alert(document.documentElement.scrollTop);  
    3.            var Div = $(DivId);  
    4.            //alert( (document.body.clientHeight-document.getElementById("editMemberDiv").clientHeight)/2+document.documentElement.scrollTop-200);  
    5.            Div.css({  
    6.            "top":function (){return (document.body.clientHeight-document.getElementById("editMemberDiv").clientHeight)/2+document.documentElement.scrollTop-200;},  
    7.            "left":function(){return (document.body.clientWidth-document.getElementById("editMemberDiv").clientWidth)/2+document.documentElement.scrollLeft;}  
    8.            });  
    9.        }  
    10.        function scall() {  
    11.            sc1("#editMemberDiv");  
    12.        }  
    13.        window.onscroll = scall;  
    14.        window.onresize = scall;  
    15.        window.onload=scall
    阅读(1861) | 评论(1) | 转发(0) |
    给主人留下些什么吧!~~

    中国物讯网112013-02-20 14:57:48

    写的很好,物讯网专业的物流门户网站