Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          使用HTML元素的style.left,style.top,style.width,style.height以及width,height屬性,都 不能獲得元素的真正位置與大小,這些屬性取出來的都是原來的設置值,例如<table  id="table1" width="500">,那么通過document.getElementById("table1").width取出來的值永遠都是500, 而不管這個表格是否已經被撐大了;同時,通過document.getElementById("table1").style.left獲得的值是空 的,因為沒有設置這個值。
          要取得HTML元素的真正位置與大小,只能通過 offsetLeft,offsetTop,clientWidth,clientHeight,offsetWidth,offsetHeight屬 性,其中offsetLeft與offsetTop分別是當前元素在父元素內的相對左坐標與相對頂坐標,要取得絕對坐標,還需要用到 offsetParent屬性,改屬性取得當前元素的父元素。要取得絕對坐標,就必須依次獲得父元素的相對坐標,直到父元素為空,然后把所有相對坐標加起 來,得到當前元素的絕對坐標。
          最常見的是日期選擇框,當點擊按鈕時彈出日期選擇框總是在按鈕的旁邊,這個選擇框的坐標,就是根據按鈕的坐標以及按鈕的offsetWidth,offsetHeight來取得的。

          -----------------------------------------------------------------------------------------------------------------------------
          HTMLElement.offsetLeft
          HTMLElement.offsetTop
          但 是需要注意的是,這兩個屬性所儲存的數值并不是該元素相對整個瀏覽器畫布的絕對位置,而是相對于其父元素位置的相對位置,也就是說這兩個數值得到的是以其 父元素左上角為(0,0)點從而計算出的數值。那么如何得到一個HTML元素的絕對位置呢,前一陣找到的一個比較好的函數,分享一下:
          //獲取元素的縱坐標
          function getTop(e){
          var offset=e.offsetTop;
          if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
          return offset;
          }
          //獲取元素的橫坐標
          function getLeft(e){
          var offset=e.offsetLeft;
          if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
          return offset;
          }
          其 原理就是利用HTMLElement.offsetParent屬性,如果當前元素的父元素不是空(null),則在原本的offsetTop基礎上加上 當前的offsetTop,然后繼續獲取父元素的父元素的offsetTop,再將其加之,最終遞歸出該元素相對于整個瀏覽器畫布的縱坐標。橫坐標亦 然。

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

          <script type="text/javascript">
          <!--
          function GetElCoordinate(e)
          {
              var t = e.offsetTop;
              var l = e.offsetLeft;
              var w = e.offsetWidth;
              var h = e.offsetHeight;
              while (e = e.offsetParent)
              {
                  t += e.offsetTop;
                  l += e.offsetLeft;
              }
              return {
                  top: t,
                  left: l,
                  width: w,
                  height: h,
                  bottom: t + h,
                  right: l + w
              }
          }

          var o = GetElCoordinate(document.getElementById("text-div"));

          document.getElementById("test-div").style.left = parseInt(o.left)+"px";
          document.getElementById("test-div").style.top = parseInt(o.bottom)+"px";
          //-->
          </script>

          posted on 2009-02-24 16:16 seal 閱讀(2798) 評論(0)  編輯  收藏 所屬分類: web
          主站蜘蛛池模板: 东丰县| 古蔺县| 承德县| 平南县| 镇宁| 潼关县| 宁远县| 迁安市| 奉新县| 永仁县| 阜阳市| 济南市| 宜城市| 镇坪县| 巴彦淖尔市| 五台县| 龙井市| 荣成市| 寿光市| 鄂伦春自治旗| 天等县| 汤阴县| 五常市| 奉贤区| 报价| 江口县| 遵化市| 江北区| 门头沟区| 文昌市| 玉屏| 博罗县| 达拉特旗| 蒙山县| 晋州市| 阿拉善右旗| 开江县| 精河县| 肃宁县| 峨边| 新源县|