Sealyu

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

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

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

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

          <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) 評(píng)論(0)  編輯  收藏 所屬分類: web
          主站蜘蛛池模板: 缙云县| 琼中| 盘锦市| 柘荣县| 洪雅县| 临朐县| 杭州市| 宜城市| 贡觉县| 维西| 宜黄县| 南昌县| 安仁县| 唐河县| 清远市| 盐亭县| 武穴市| 晋江市| 乐亭县| 寻甸| 台湾省| 勐海县| 临桂县| 扎鲁特旗| 鸡西市| 卓尼县| 商水县| 明星| 深圳市| 额尔古纳市| 望江县| 开江县| 卓资县| 上蔡县| 同仁县| 同心县| 综艺| 高邑县| 临猗县| 讷河市| 永泰县|