zoukankan      html  css  js  c++  java
  • 获得当前元素的绝对位值

                 在网页设计中经常要得到元素的绝对位值,以便让自己弹出的层不在页面上变形。所以我们要得到点击元素的绝对坐标。在看阿里的js的时候,看到一个,能支持三种浏览器,所以在下边贴以下:
    调用的方法很简单:
    <input type="button" onclick="Show(this)" id="Button2" value="clickMe" /><br />
    <script type="text/javascript">
        
    function Show(checkEl)
        { 
             document.getElementById(
    "tishiDiv").style.display = "block";
          document.getElementById(
    "tishiDiv").style.position = "absolute";
          document.getElementById(
    "tishiDiv").style.top = getXY(checkEl)[1]+12+"px";
          document.getElementById(
    "tishiDiv").style.left = getXY(checkEl)[0]-10+"px";
            
        }
        
    /**
     * 获取对象el的X,Y坐标
     * @param {Object} el
     
    */
    function getXY(el){
      
    var pos;
      
    if(this.getExplorerType()==1){
        
    var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
        
    var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
        pos 
    = [el.getBoundingClientRect().left+scrollLeft, el.getBoundingClientRect().top+scrollTop];
      }
    else{
        pos 
    = [el.offsetLeft, el.offsetTop];
        
    var parentNode = el.offsetParent;
        
    if (parentNode != el) {
          
    while (parentNode) {
            pos[
    0+= parentNode.offsetLeft;
            pos[
    1+= parentNode.offsetTop;
            parentNode 
    = parentNode.offsetParent;
          }
        }
        
    if (el.parentNode) { parentNode = el.parentNode; }
        
    else { parentNode = null; }
                
        
    while (parentNode && parentNode.tagName.toUpperCase() != 'BODY' && parentNode.tagName.toUpperCase() != 'HTML'){
          
    if (parentNode.style.display != 'inline') {
            pos[
    0-= parentNode.scrollLeft;
            pos[
    1-= parentNode.scrollTop;
          }

          
    if (parentNode.parentNode) {
            parentNode 
    = parentNode.parentNode; 
          } 
    else { parentNode = null; }
        }
      }
      
    return pos;
    }
    function getExplorerType(){
      
    var ua = navigator.userAgent.toLowerCase();
      
    if(window.ActiveXObject){
        
    return 1;
      }
    else if((ua.indexOf('firefox')>-1)){
        
    return 2;
      }
    else if((ua.indexOf('opera')>-1)){
        
    return 3;
      }
    }
        
    </script>
  • 相关阅读:
    汇编语言
    离散数学:每条边的权重均不相同的带权图有唯一最小生成树
    android源码如何起步与阅读方法
    linux内核——会话、进程组、线程组
    ubuntu系统——增加磁盘空间
    Android系统源代码——所需工具
    android源码相关网站
    git——分布式版本控制系统
    linux内核——进程,轻量级进程,线程,线程组
    Android系统源代码学习步骤
  • 原文地址:https://www.cnblogs.com/xbf321/p/889797.html
Copyright © 2011-2022 走看看