javascript獲取文檔坐標(biāo)和視口坐標(biāo)
元素的位置是以像素度量的,向右代表X坐標(biāo)的增加,向下代表Y坐標(biāo)的增加,但是,有兩個(gè)不同的點(diǎn)作為坐標(biāo)系的原點(diǎn):元素的X和Y坐標(biāo)可以相對(duì)于文檔的左上角或者相對(duì)于在職中顯示文檔的視口的左上角。
在定級(jí)窗口和標(biāo)簽頁中,”視口“只是實(shí)際顯示文檔內(nèi)容的瀏覽器的一部分:它不包括瀏覽器的“外殼”(如菜單、工具條和標(biāo)簽頁)。
針對(duì)框架也中顯示的文檔,是口試定了框架頁的<iframe>元素。無論在何種情況下,當(dāng)討論元素的位置是,必須弄清楚所使用的坐標(biāo)是文檔坐標(biāo)還是視口坐標(biāo)。(注意,視口坐標(biāo)有事也叫作窗口坐標(biāo))
如果文檔比視口要小,或者說還未出現(xiàn)滾動(dòng),則文檔的左上角就是視口的左上角,文檔和視口坐標(biāo)系統(tǒng)是同一個(gè)。但是一般來說,要在兩種坐標(biāo)系之間互相轉(zhuǎn)換,必須加上或減去滾動(dòng)的偏移量(scroll offset)。例如,在文檔坐標(biāo)中如果一個(gè)元素的Y坐標(biāo)是200像素,并且用戶已經(jīng)把瀏覽器向下滾動(dòng)了75像素,那么視口坐標(biāo)中元素的Y坐標(biāo)就是125像素。同樣,在視口坐標(biāo)中如果一個(gè)元素的X坐標(biāo)是400像素,并且用戶已經(jīng)水平滾動(dòng)了視口200像素,那么文檔坐標(biāo)中像素的X坐標(biāo)中元素的X坐標(biāo)就是600像素。
文檔坐標(biāo)比視口坐標(biāo)更加基礎(chǔ),并且在用戶滾動(dòng)是他們不會(huì)發(fā)生變化。不過,在客戶端編程中使用視口坐標(biāo)是非常常見的。當(dāng)使用CSS指定元素的位置時(shí)運(yùn)用了文檔坐標(biāo)。但是最簡單的查詢?cè)匚恢玫姆椒ǎ篻etBoundingClientRect()返回視口坐標(biāo)中的位置。類似的,當(dāng)為鼠標(biāo)事件注冊(cè)事件處理程序函數(shù)時(shí),報(bào)告的鼠標(biāo)指針的坐標(biāo)是在視口坐標(biāo)系中。
為了在坐標(biāo)系中轉(zhuǎn)換,我們需要判定瀏覽器窗口的滾動(dòng)條的位置。Window對(duì)象的pageXoffset和pageYOffset屬性在所有的瀏覽器中提供這些值,除了IE8及更早的版本以外。IE(和所有現(xiàn)代瀏覽器)也可以通過scrollLeft和scrollTop屬性來獲得滾動(dòng)條的位置。令人迷惑的是,正常的情況下通過查找文檔的根節(jié)點(diǎn)(document.documentElement)來獲取這些屬性,但是在怪異模式下,必須在文檔的<body>元素(documeng.body)上查詢它們。以下顯示了如何簡便的查詢滾動(dòng)條的位置。
functon getScrollOffsets(w){ w = w || window; var sLeft,sTop; if(w.pageXOffset != null) { sLeft = w.pageXOffset; sTop = w.pageYOffset; return {x:sLeft,y:sTop}; } if(document.compatMode == "CSS1Compat"){ sLeft = document.documentElement.scrollLeft == 0 ? document.body.scrollLeft : document.documentElement.scrollLeft; sTop = document.documentElement.scrollTop == 0 ? document.body.scrollTop : document.documentElement.scrollTop; return {x:sLeft,y:sTop}; }else if(document.compatMode == "BackCompat"){ sLeft = document.body.scrollLeft; sTop = document.body.scrollTop; return {x:sLeft,y:sTop}; } }
有時(shí)候能夠判定視口的尺寸也是非常有用的,例如,為了確定文檔的案部分是當(dāng)前可見的。利用滾動(dòng)偏移量查詢視口的尺寸的簡單方法在IE8及更早版本中無法工作,而且該技術(shù)在IE中的運(yùn)行法師還要取決于瀏覽器是否處于怪異模式還是標(biāo)準(zhǔn)模式。
window下的屬性:
innerHeight:包括滾動(dòng)條在內(nèi)的窗口內(nèi)容部分的高度
innerWidth:包括滾動(dòng)條在內(nèi)的窗口內(nèi)容部分的寬度
outerHeight:整個(gè)瀏覽器的高度,包括界面所有組成部分。
outerWidth:整個(gè)瀏覽器的寬度,包括界面所有組成部分。
pageXOffset:瀏覽器窗口的滾動(dòng)條X軸的位置
pageYOffset:瀏覽器窗口的滾動(dòng)條Y軸的位置
scrollX:瀏覽器窗口的滾動(dòng)條X軸的位置
scrollY:瀏覽器窗口的滾動(dòng)條Y軸的位置
屬性
document.documentElement document.body
clientHeight 視口內(nèi)可見內(nèi)容的大小,不包括滾動(dòng)的部分和滾動(dòng)條。
clientWidth
clientLeft
clientTop
offsetHeight 內(nèi)容大小,并且包括滾動(dòng)條。
offsetWidth
offsetLeft
offsetTop
scrollHeight 滾動(dòng)內(nèi)容的大小,包括滾動(dòng)的部分,但不包括滾動(dòng)條。
scrollWidth
scrollTop
scrollWidth
查詢窗口的視口尺寸:
function getViewportSize(w){ w = w || window; var cWidth,cHeight; if(w.innerWidth != null){ cWidth = w.innerWidht; cHeight = w.innerHeight; return {w:cWidth,h:w.cHeight}; } if(document.compatMode == "CSS1Compat"){ cWidth = document.documentElement.clientWidth; cHeight = doument.documentElement.clientHeight; return {w:cWidth,h:w.cHeight}; }else if(document.compatMode == "BackCompat"){ cWidth = document.body.clientWidth; cHeight = doument.body.clientHeight; return {w:cWidth,h:w.cHeight}; } }
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
- 微信JS-SDK坐標(biāo)位置如何轉(zhuǎn)換為百度地圖坐標(biāo)
- 基于JavaScript實(shí)現(xiàn)高德地圖和百度地圖提取行政區(qū)邊界經(jīng)緯度坐標(biāo)
- 通過百度地圖獲取公交線路的站點(diǎn)坐標(biāo)的js代碼
- 利用java、js或mysql計(jì)算高德地圖中兩坐標(biāo)之間的距離
- JavaScript獲取對(duì)象在頁面中位置坐標(biāo)的方法
- js浮點(diǎn)數(shù)精確計(jì)算(加、減、乘、除)
- 根據(jù)經(jīng)緯度計(jì)算地球上兩點(diǎn)之間的距離js實(shí)現(xiàn)代碼
- 精通Javascript系列之?dāng)?shù)值計(jì)算
- js中火星坐標(biāo)、百度坐標(biāo)、WGS84坐標(biāo)轉(zhuǎn)換實(shí)現(xiàn)方法示例
相關(guān)文章
JavaScript中windows.open()、windows.close()方法詳解
這篇文章主要介紹了JavaScript中windows.open()、windows.close()方法詳解 的相關(guān)資料,需要的朋友可以參考下2016-07-07js實(shí)現(xiàn)兼容IE和FF的上下層的移動(dòng)
本來是很簡單的一個(gè)功能,可是一開始弄的時(shí)候,還有IE能實(shí)現(xiàn),F(xiàn)F總是不能實(shí)現(xiàn),在網(wǎng)上看了半天,也沒弄出個(gè)所以然,所以在同事的幫忙下,總算弄出來了,瀏覽器的兼容性考的還是細(xì)節(jié)上面的東西,所有關(guān)于細(xì)節(jié)的,我會(huì)用注釋標(biāo)出來的。2015-05-05js實(shí)現(xiàn)每日自動(dòng)換一張圖片的方法
這篇文章主要介紹了js實(shí)現(xiàn)每日自動(dòng)換一張圖片的方法,涉及javascript操作圖片與日期的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-05-05離開當(dāng)前頁面前使用js判斷條件提示是否要離開頁面
這篇文章主要介紹了離開當(dāng)前頁面前如何使用js判斷條件提示是否要離開頁面,需要的朋友可以參考下2014-05-05promise和co搭配生成器函數(shù)方式解決js代碼異步流程的比較
這篇文章主要介紹了promise和co搭配生成器函數(shù)方式解決js代碼異步流程的比較,在es6中引入的原生Promise為js的異步回調(diào)問題帶來了一個(gè)新的解決方式co模塊搭配Generator函數(shù)的同步寫法,更是將js的異步回調(diào)帶了更優(yōu)雅的寫法。感興趣的小伙伴們可以參考一下2018-05-05Ionic學(xué)習(xí)日記實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)
本篇文章主要介紹了Ionic學(xué)習(xí)日記實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02利用a標(biāo)簽自動(dòng)解析URL分析網(wǎng)址實(shí)例
a標(biāo)簽也和window.location一樣,也有這樣屬性,因此可以利用它來分析網(wǎng)址,下面的實(shí)例代碼,大家可以看看2014-10-10