首頁  >  文章  >  web前端  >  js取得元素相對視窗位置的實作程式碼_javascript技巧

js取得元素相對視窗位置的實作程式碼_javascript技巧

WBOY
WBOY原創
2016-05-16 16:35:031185瀏覽

JS取得元素的offsetTop,offsetLeft等屬性

obj.clientWidth //取得元素的寬度

obj.clientHeight //元素的高度
obj.offsetLeft //元素相對於父元素的left
obj.offsetTop //元素相對於父元素的top
obj.offsetWidth //元素的寬度
obj.offsetHeight //元素的高度

區別:

clientWidth = width padding
clientHeight = height padding
offsetWidth = width padding border
offsetHeight = width padding border
offset比client多了border的寬度

//获取元素的纵坐标(相对于窗口)
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;
}

之前也寫過一篇JS關於取得元素位置的文章:JS取得元素的offsetTop,offsetLeft等屬性,我們可以透過offsetTop和offsetLeft屬性取得元素相對視窗的位置,但offsetTop和offsetLeft屬性都是相對於父元素定位的,而通常需要取得位置的元素都不是在最外層,所以遍歷上級元素的offset相關屬性少不了。那效率就成問題了。

//获取元素的纵坐标(相对于窗口)
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;
}

好在瀏覽器給我提供了相應的接口getBoundingClientRect,這個方法最早出現在IE瀏覽器中,後來的瀏覽器也跟著支持了這個方法,而且還更加完善,IE中只能獲取到元素的left,top,bottom,right的屬性,而後面的現代瀏覽器還能取得到元素的width和

Chrome Firefox (Gecko) Internet Explorer Opera Safari
1.0 3.0 (1.9) 4.0 (Yes) 4.0

這裡要注意的是,bottom是元素底部相對於視窗頂部的距離,而不是像css裡面position的bottom相對於視窗底部,同理,rihgt屬性是元素最右邊相對於視窗左邊的距離。

var box = document.getElementById("box");
var pos = box.getBoundingClientRect();
box.innerHTML = "top:"+pos.top +
  "left:"+pos.left +
  "bottom:"+pos.bottom +
  "right:"+pos.right +
  "width:"+pos.width +
  "height:"+pos.height

原創文章,轉載請註明: 轉載自前端開發

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn