歸納篇(三)js獲取頁面的各種距離和坐標

一.js獲取頁面各種距離

1.screen系列

  • screen.width:屏幕的寬度
  • screen.height:屏幕的高度

2.style系列(必須是行內(nèi)設(shè)置樣式才有效)

  • element.style.width:當前對象的寬度朱浴。
  • element.style.height:當前對象的高度。
  • element.style.left:當前對象的left值舍悯。
  • element.style.top:當前對象的top值裆蒸。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>demo</title>
<style type="text/css">
*{padding: 0;margin: 0;}
html,body{height: 100%; margin:0; padding:0;}
.wrap{height: 1900px;background: #000;}
</style>
</head>
<body>
<!--設(shè)置百分百寬度-->
<div class="wrap" id="wrap" style="width: 80%"></div>
<script type="text/javascript">
    window.onload=function(){
        var wrap=document.getElementById("wrap");
        var styleW=wrap.style.width;
        var styleH=wrap.style.height;
        var oW=wrap.offsetWidth;
        console.log(styleW);//返回80%
        console.log(styleH);//沒有在行內(nèi)樣式設(shè)置亿鲜,無效核蘸,返回空值
        console.log(oW);//返回的是數(shù)字
    }
</script>
</body>
</html>

3.offset系列

  • element.offsetParent:當前對象的上級層對象叔收。
  • element.offsetWidth:當前對象的寬度撤奸。(width+padding+border)
  • element.offsetHeight:當前對象的高度吠昭。(Height+padding+border)
  • element.offsetLeft:當前對象到其上級層左邊的距離 。
  • element.offsetTop:當前對象到其上級層上邊的距離 胧瓜。
  • element.offsetWidthstyle.width區(qū)別:
    1.style.width返回值除了數(shù)字外還帶有單位px矢棚;
    2.如對象的寬度設(shè)定值為百分比寬度,則無論頁面變大還是變小,style.width都返回此百分比,而offsetWidth則返回在不同頁面中對象的寬度值而不是百分比值府喳;
    3.如果沒有給 HTML 元素指定過 width樣式蒲肋,則 style.width 返回的是空字符串;
    4.style.width不包含border和padding钝满。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>demo</title>
<style type="text/css">
*{padding: 0;margin: 0;}
html,body{height: 100%; margin:0; padding:0;}
.wrap{width: 600px;height: 600px;background: #000;border: 3px solid green;position: relative;}
.box{width:300px;height: 400px; border: 5px solid #fff;padding:5px;margin: 30px}
</style>
</head>
<body>
<div class="wrap" id="wrap">
    <div class="box" id="box"></div>
</div>
<script type="text/javascript">
    window.onload=function(){
        var wrap=document.getElementById("wrap");
        var box=document.getElementById("box");
        var oW=box.offsetWidth;
        var oT=box.offsetTop;
        console.log(oW);//返回320,包含padding+border+width
        console.log(oT);//返回30,不包含父級的border
    }
</script>

4.client系列

  • element.clientWidth: 獲取對象可見內(nèi)容的寬度兜粘,不包括滾動條,不包括邊框弯蚜;
  • element.clientHeight: 獲取對象可見內(nèi)容的高度孔轴,不包括滾動條,不包括邊框熟吏;
  • element.clientLeft: 獲取對象的border寬度
  • element.clientTop:獲取對象的border高度

5.scroll系列

  • element.scrollWidth:獲取對象的滾動寬度 距糖。
  • element.scrollHeight: 獲取對象的滾動高度。
  • element.scrollLeft:設(shè)置或獲取位于對象左邊界和對象中目前可見內(nèi)容的最左端之間的距離(width+padding為一體)
  • element.scrollTop:設(shè)置或獲取位于對象最頂端和對象中可見內(nèi)容的最頂端之間的距離牵寺;(height+padding為一體)
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>demo</title>
<style type="text/css">
*{padding: 0;margin: 0;}
html,body{height: 100%; margin:0; padding:0;}
.wrap{width: 600px;height: 600px;border: 3px solid green;position: relative;}
.box{width:300px;height: 400px; border: 3px solid red;padding:5px;margin: 30px;overflow: auto;}
.box p{font-size: 20px;line-height: 36px;}
</style>
</head>
<body>
<!-- 設(shè)置父級 -->
<div class="wrap" id="wrap">
    <div class="box" id="box">
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
        <p>測試</p>
    </div>
</div>
<script type="text/javascript">
    window.onload=function(){
        var wrap=document.getElementById("wrap");
        var box=document.getElementById("box");
        var oW=box.offsetWidth;
        var oH=box.offsetHeight;
        var oT=box.offsetTop;
        var cW=box.clientWidth;
        var cH=box.clientHeight;
        var cT=box.clientTop;
        console.log('box.offsetWidth:'+oW);//返回box.offsetWidth:316
        console.log('box.offsetHeight:'+oH);//返回box.offsetHeight:416
        console.log('box.offsetTop:'+oT);//返回box.offsetTop:30
        console.log('box.clientWidth:'+cW);//返回box.clientWidth:293
        console.log('box.clientHeight:'+cH);//返回box.clientHeight:410
        console.log('box.clientTop:'+cT);//返回box.clientTop:3
        console.log('box.scrollWidth:'+sW);//返回box.scrollWidth:293
        console.log('box.scrollHeight:'+sH);//返回box.scrollHeight:1018
    }
</script>
</body>
</html>

document.body和document.documentElement兼容問題

  • body是DOM對象里的body子節(jié)點悍引,即 <body> 標簽;documentElement 是整個節(jié)點樹的根節(jié)點root帽氓,即<html> 標簽趣斤;
  • 整個文檔的一個根就是,在DOM中可以使用document.documentElement來訪問它,它就是整個節(jié)點樹的根節(jié)點黎休。而body是子節(jié)點浓领,要訪問到body標簽玉凯,在腳本中可以寫:document.body。
  • 參考鏈接 clientHeight , scrollHeight , offsetHeight之間的區(qū)別及兼容方案
  • JS中完美兼容各大瀏覽器的scrolltop方法
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;

二.js獲取頁面坐標數(shù)據(jù)

1.client系列

  • event.clientX :設(shè)置或獲取鼠標指針位置相對于當前窗口的 x 坐標联贩,其中客戶區(qū)域不包括窗口自身的控件和滾動條漫仆。
  • event.clientY: 設(shè)置或獲取鼠標指針位置相對于當前窗口的 y 坐標,其中客戶區(qū)域不包括窗口自身的控件和滾動條泪幌。

2.screen系列

  • event.screenX: 設(shè)置或獲取獲取鼠標指針位置相對于用戶屏幕的 x 坐標盲厌。
  • event.screenY: 設(shè)置或獲取鼠標指針位置相對于用戶屏幕的 y 坐標。

3.offset系列

  • event.offsetX:,鼠標相比較于觸發(fā)事件的元素的X位置,以元素盒子模型的內(nèi)容區(qū)域的左上角為參考點,如果有boder,可能出現(xiàn)負值祸泪。
  • event.offsetY:同上吗浩,Y位置。

4.layer系列(IE8以及以下版本沒有)

  • event.layerX:鼠標相比較于當前坐標系的X位置,即如果觸發(fā)元素沒有設(shè)置絕對定位或相對定位,以頁面為參考點,如果有,將改變參考坐標系,從觸發(fā)元素盒子模型的border區(qū)域的左上角為參考點
  • event.layerY:同上没隘,Y位置懂扼。

5.XY系列(FF沒有)

  • event.x:相對可視區(qū)域的X坐標
  • event.y:相對可視區(qū)域的Y坐標

6.page系列 (IE8以及以下版本沒有)

  • 類似于event.clientXevent.clientY右蒲,但它們使用的是文檔坐標而非窗口坐標阀湿。。
  • event.pageX:設(shè)置或獲取鼠標指針位置相對于當前文檔的 x 坐標
  • event.pageY:設(shè)置或獲取鼠標指針位置相對于當前文檔的 y 坐標
document.onclick = function(e){
        e = e || window.event;
        console.log('e.clientX:',e.clientX);
        console.log('e.screenX:',e.screenX);
        console.log('e.offsetX:',e.offsetX);
        console.log('e.layerX:',e.layerX);
        console.log('e.pageX:',e.pageX);
        console.log('e.x:',e.x);
    }

三品嚣、jQuery對應(yīng)寫法

整理了這么多,復習了一遍有些概念在心中歸類更明確了點翰撑,如有錯誤罩旋,歡迎指證。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眶诈,一起剝皮案震驚了整個濱河市涨醋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逝撬,老刑警劉巖浴骂,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宪潮,居然都是意外死亡溯警,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門狡相,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梯轻,“玉大人,你說我怎么就攤上這事尽棕≡簦” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伊诵。 經(jīng)常有香客問我单绑,道長,這世上最難降的妖魔是什么曹宴? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任搂橙,我火速辦了婚禮,結(jié)果婚禮上浙炼,老公的妹妹穿的比我還像新娘份氧。我一直安慰自己,他們只是感情好弯屈,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恋拷,像睡著了一般资厉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔬顾,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天宴偿,我揣著相機與錄音,去河邊找鬼诀豁。 笑死窄刘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的舷胜。 我是一名探鬼主播娩践,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烹骨!你這毒婦竟也來了翻伺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤沮焕,失蹤者是張志新(化名)和其女友劉穎吨岭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峦树,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡辣辫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了魁巩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片急灭。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖歪赢,靈堂內(nèi)的尸體忽然破棺而出化戳,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布点楼,位于F島的核電站扫尖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掠廓。R本人自食惡果不足惜换怖,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟀瞧。 院中可真熱鬧沉颂,春花似錦、人聲如沸悦污。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽切端。三九已至彻坛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踏枣,已是汗流浹背昌屉。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茵瀑,地道東北人间驮。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像马昨,于是被迫代替她去往敵國和親竞帽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容