zoukankan      html  css  js  c++  java
  • JavaScript 获取 Div 的坐标

    示例代码:

      1 <html>
      2     <head>
      3         <script>
      4             function CPos(x, y)
      5             {
      6                 this.x = x;
      7                 this.y = y;
      8             }
      9             /**
     10              * 得到对象的相对浏览器的坐标
     11              */
     12             function GetObjPos(ATarget)
     13             {
     14                 var target = ATarget;
     15                 var pos = new CPos(target.offsetLeft, target.offsetTop);
     16                  
     17                 var target = target.offsetParent;
     18                 while (target)
     19                 {
     20                     pos.x += target.offsetLeft;
     21                     pos.y += target.offsetTop;
     22                      
     23                     target = target.offsetParent
     24                 }
     25                 return pos;
     26             }
     27             
     28             function getElementPos(elementId){    
     29                 var ua = navigator.userAgent.toLowerCase();    
     30                 var isOpera = (ua.indexOf('opera') != -1);    
     31                 var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof    
     32                 var el = document.getElementById(elementId);    
     33                 if (el.parentNode === null || el.style.display == 'none') {    
     34                     return false;    
     35                 }    
     36                 var parent = null;    
     37                 var pos = [];    
     38                 var box;    
     39                 if (el.getBoundingClientRect) //IE    
     40                 {    
     41                     box = el.getBoundingClientRect();    
     42                     var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);    
     43                     var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);    
     44                     return {    
     45                         x: box.left + scrollLeft,    
     46                         y: box.top + scrollTop    
     47                     };    
     48                 }    
     49                 else    
     50                     if (document.getBoxObjectFor) // gecko        
     51                     {    
     52                         box = document.getBoxObjectFor(el);    
     53                         var borderLeft = (el.style.borderLeftWidth) ? parseInt(el.style.borderLeftWidth) : 0;    
     54                         var borderTop = (el.style.borderTopWidth) ? parseInt(el.style.borderTopWidth) : 0;    
     55                         pos = [box.x - borderLeft, box.y - borderTop];    
     56                     }    
     57                     else // safari & opera        
     58                     {    
     59                         pos = [el.offsetLeft, el.offsetTop];    
     60                         parent = el.offsetParent;    
     61                         if (parent != el) {    
     62                             while (parent) {    
     63                                 pos[0] += parent.offsetLeft;    
     64                                 pos[1] += parent.offsetTop;    
     65                                 parent = parent.offsetParent;    
     66                             }    
     67                         }    
     68                         if (ua.indexOf('opera') != -1 || (ua.indexOf('safari') != -1 && el.style.position == 'absolute')) 
     69              
     70             {    
     71                             pos[0] -= document.body.offsetLeft;    
     72                             pos[1] -= document.body.offsetTop;    
     73                         }    
     74                     }    
     75                 if (el.parentNode) {    
     76                     parent = el.parentNode;    
     77                 }    
     78                 else {    
     79                     parent = null;    
     80                 }    
     81                 while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') { // account for any scrolled 
     82              
     83             ancestors    
     84                     pos[0] -= parent.scrollLeft;    
     85                     pos[1] -= parent.scrollTop;    
     86                     if (parent.parentNode) {    
     87                         parent = parent.parentNode;    
     88                     }    
     89                     else {    
     90                         parent = null;    
     91                     }    
     92                 }    
     93                 return {    
     94                     x: pos[0],    
     95                     y: pos[1]    
     96                 };    
     97             } 
     98  
     99  
    100             function loadinfo(){
    101                 alert( document.body.clientWidth );
    102                 //alert( window.screen.width );
    103                 alert( document.documentElement.clientWidth );
    104                 var obj =  document.getElementById('tiao');
    105                 alert(GetObjPos(obj)['x']); //x坐标
    106                 alert(GetObjPos(obj)['y']); //y坐标
    107                 
    108                 alert( '右边距' + ( document.documentElement.clientWidth - GetObjPos(obj)['x'] ))
    109                 alert( "=====================" ); 
    110                 var xd = getElementPos("tiao");
    111                 alert(xd.x);
    112                 alert(xd.y);
    113             }
    114             
    115             
    116         </script>
    117     </head>
    118     <body onload="loadinfo();">
    119         
    120         <div style="margin-left:100px;">
    121             <div id="tiao" style="margin-left:100px;">测试</div>
    122         </div>
    123         
    124     </body>
    125 </html>
    View Code

    知识扩展:

    网页可见区域宽:document.body.clientWidth
    网页可见区域高:document.body.clientHeight
    网页可见区域宽:document.body.offsetWidth (包括边线的宽)
    网页可见区域高:document.body.offsetHeight (包括边线的宽)
    网页正文全文宽:document.body.scrollWidth
    网页正文全文高:document.body.scrollHeight
    网页被卷去的高:document.body.scrollTop
    网页被卷去的左:document.body.scrollLeft
    网页正文部分上:window.screenTop
    网页正文部分左:window.screenLeft
    屏幕分辨率的高:window.screen.height
    屏幕分辨率的宽:window.screen.width
    屏幕可用工作区高度:window.screen.availHeight
    屏幕可用工作区宽度:window.screen.availWidth

    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth
    scrollHeight: 获取对象的滚动高度。
    scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
    scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
    scrollWidth:获取对象的滚动宽度
    offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
    offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
    offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
    event.clientX 相对文档的水平座标
    event.clientY 相对文档的垂直座标
    event.offsetX 相对容器的水平坐标
    event.offsetY 相对容器的垂直坐标
    document.documentElement.scrollTop 垂直方向滚动的值
    event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量


    IE,FireFox 差异如下:

    IE6.0、FF1.06+:

    clientWidth = width + padding

    clientHeight = height + padding

    offsetWidth = width + padding + border

    offsetHeight = height + padding + border

    IE5.0/5.5:
    clientWidth = width - border

    clientHeight = height - border

    offsetWidth = width

    offsetHeight = height

    (需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)

    网页可见区域宽: document.body.clientWidth
    网页可见区域高: document.body.clientHeight
    网页可见区域宽: document.body.offsetWidth (包括边线的宽)
    网页可见区域高: document.body.offsetHeight (包括边线的高)
    网页正文全文宽: document.body.scrollWidth
    网页正文全文高: document.body.scrollHeight
    网页被卷去的高: document.body.scrollTop
    网页被卷去的左: document.body.scrollLeft
    网页正文部分上: window.screenTop
    网页正文部分左: window.screenLeft
    屏幕分辨率的高: window.screen.height
    屏幕分辨率的宽: window.screen.width
    屏幕可用工作区高度: window.screen.availHeight
    屏幕可用工作区宽度: window.screen.availWidth

    -------------------

    技术要点
    本节代码主要使用了Document对象关于窗口的一些属性,这些属性的主要功能和用法如下。

    要得到窗口的尺寸,对于不同的浏览器,需要使用不同的属性和方法:若要检测窗口的真实尺寸,在Netscape下需要使用Window的属性;在IE下需要深入Document内部对body进行检测;在DOM环境下,若要得到窗口的尺寸,需要注意根元素的尺寸,而不是元素。

    Window对象的innerWidth属性包含当前窗口的内部宽度。Window对象的innerHeight属性包含当前窗口的内部高度。

    Document对象的body属性对应HTML文档的标签。Document对象的documentElement属性则表示HTML文档的根节点。

    document.body.clientHeight表示HTML文档所在窗口的当前高度。document.body. clientWidth表示HTML文档所在窗口的当前宽度。

    引用:http://blog.csdn.net/freecodetor/article/details/2954560

  • 相关阅读:
    tail命令语法
    正则表达式示例
    HTTP状态码对照表 HTTP response codes
    linux 源的配置更新
    shell基本语法
    谁偷走了程序员的时间??
    Spring Data JPA 简单查询-接口方法
    GET和POST两种基本请求方法的区别
    您是怎样度过人生的低潮期的
    树莓派中Docker部署.Net Core 3.1 (一)
  • 原文地址:https://www.cnblogs.com/alicusblog/p/3371421.html
Copyright © 2011-2022 走看看