js獲取元素在頁面中的座標程式碼例項

admin發表於2017-04-06

本章節分享一段程式碼例項,它實現了獲取一個元素在頁面中座標的功能。

大家要注意是在頁面中的座標而不僅僅是在瀏覽器客戶區的座標,也就是包括滾動遮蓋的部分。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style>
body{height:1500px;}
#show{
  width:200px;
  height:100px;
  background:#ccc;
  position:absolute;
  top:200px;
  left:100px;
}
#bt{
  position:fixed;
  top:350px;
  left:100px;
}
</style>
<script type="text/javascript">
function getOffsetRect(ele){
  var box=ele.getBoundingClientRect();
  var body=document.body,
  docElem=document.documentElement;
  //獲取頁面的scrollTop,scrollLeft(相容性寫法)
  var scrollTop=window.pageYOffset||docElem.scrollTop||body.scrollTop,
      scrollLeft=window.pageXOffset||docElem.scrollLeft||body.scrollLeft;
  var top=box.top+scrollTop,
      left=box.left+scrollLeft;
  return {
    //Math.round 相容火狐瀏覽器bug
    top:Math.round(top),
    left:Math.round(left)
  }
}
window.onload=function(){
  var obt=document.getElementById("bt");
  var odiv=document.getElementById("show");
  obt.onclick=function(){
    var obj=getOffsetRect(odiv);
    odiv.innerHTML=obj.top;
  }
}
</script>
</head>
<body>
<div id="show"></div>
<input type="button" id="bt" value="檢視效果">
</body>
</html>

上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。

一.程式碼註釋:

(1).function getOffsetRect(ele){},引數規定要獲取座標的元素。

(2).var box=ele.getBoundingClientRect(),獲取元素在瀏覽器客戶區的座標。

(3). var body=document.body,獲取body元素。

(4).docElem=document.documentElement,獲取document元素。

(5).var scrollTop=window.pageYOffset||docElem.scrollTop||body.scrollTop,相容所有瀏覽器的獲取向上滾動的尺寸。

(6).var top=box.top+scrollTop,獲取在頁面垂直方向的偏移量,也就是元素在客戶區的上偏移量加上頁面向上滾動的尺寸。

(7).return {

  //Math.round 相容火狐瀏覽器bug

  top:Math.round(top),

  left:Math.round(left)

},返回一個物件,此物件包含偏移量。

二.相關閱讀:

(1).pageYOffset可以參閱window.pageYOffset一章節。

(2).docElem.scrollTop||body.scrollTop可以參閱document.documentElement.scrollTop瀏覽器相容一章節。

(3).Math.round()可以參閱javascript Math.round()一章節。

(4).getBoundingClientRect()方法可以參閱js getBoundingClientRect()一章節。

(5).innerHTML屬性可以參閱js innerHTML一章節。

相關文章