鼠標(biāo)事件的screenY,pageY,clientY,layerY,offsetY屬性詳解

screenY
鼠標(biāo)相對于顯示器屏幕左上角的偏移
pageY
鼠標(biāo)相對于頁面左上角的偏移 (其值不會(huì)受滾動(dòng)條的影響)
IE9之下并不支持這個(gè)屬性
但是可以寫點(diǎn)代碼計(jì)算出來。 jQuery中的實(shí)現(xiàn):
// Calculate pageX/Y if missing and clientX/Y available
if ( event.pageX == null && original.clientX != null ) {
eventDoc = event.target.ownerDocument || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft||body&&body.clientLeft || 0 );
event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
}
簡單點(diǎn)實(shí)現(xiàn)就是。
鼠標(biāo)相對于瀏覽器視口的偏移加上文檔的滾動(dòng)條隱藏的高度減去文檔的clientTop.
var pageY = event.clientY +document.documentElement. scrollTop-document.documentElement.clientTop
為何要減去document.documentElement.clientTop
這是IE8之下瀏覽器特有的文檔的偏移,即使設(shè)置html,body的padding和margin為0也不會(huì)影響其值。
在iE7下測試,得到
document.documentElement.clientTop --> 2px document.documentElement.clientLeft --> 2px
document.bocy.clientTop --> 0px document.body.clientLeft --> 0px
clientY
鼠標(biāo)相對于瀏覽器視口左上角的偏移
注意clientY和pageY的區(qū)別,clientY在頁面無滾動(dòng)條的情況下值等同于pageY
----------------------------------分割-----------------------------------------------
layerY
如果元素的position樣式不是默認(rèn)的static,我們說這個(gè)元素具有定位屬性。
在當(dāng)前觸發(fā)鼠標(biāo)事件的元素和它的祖先元素中找到最近的具有定位屬性的元素,計(jì)算鼠標(biāo)與其的偏移值,以找到元素的border的左上角的外交點(diǎn)作為相對點(diǎn)。如果找不到具有定位屬性的元素,那么就相對于當(dāng)前頁面計(jì)算偏移,此時(shí)等同于pageY。

IE9之下并不支持這個(gè)屬性,但是可以用其特有的offsetY替換
offsetY
IE專有的屬性
offsetY和layerY的不同在于,前者的在計(jì)算偏移值時(shí),相對于元素的border左上角的內(nèi)交點(diǎn),因此當(dāng)鼠標(biāo)位于元素的border上時(shí),偏移值是一個(gè)負(fù)值。 另外offsetY并不在乎觸發(fā)事件的元素是否有定位屬性,它總是相對于觸發(fā)事件的元素來計(jì)算偏移值。

鑒于layerY和offsetY的不同,要兼容的使用二者要注意
1.觸發(fā)事件的元素一定要設(shè)置定位屬性。
2.在元素具有上邊框border-top的情況下, layerY比offsetY的值多一個(gè)border-top的寬度值。
//這里的element.borderTopWidth必須是實(shí)際計(jì)算出的元素的上邊框?qū)挾取?br /> var borderTopWidth = window.getComputedStyle ? window.getComputedStyle(element,null).borderTopWidth: element.currentStyle.borderTopWidth;
var offsetY = event.offsetY||(event.layerY + borderTopWidth);
通過layerY和offsetY屬性,可以很方便的計(jì)算鼠標(biāo)相對于綁定鼠標(biāo)事件元素的偏移,這在某些時(shí)候非常有用。
這里詳細(xì)說了鼠標(biāo)豎直方向的偏移屬性,水平方向的偏移類似,不再討論。
以上就是本文的全部內(nèi)容了,希望大家能夠喜歡。
- js 鼠標(biāo)點(diǎn)擊事件及其它捕獲
- 關(guān)于window.pageYOffset和document.documentElement.scrollTop
- js鼠標(biāo)點(diǎn)擊事件在各個(gè)瀏覽器中的寫法及Event對象屬性介紹
- CSS鼠標(biāo)響應(yīng)事件經(jīng)過、移動(dòng)、點(diǎn)擊示例介紹
- 為GridView的行添加鼠標(biāo)經(jīng)過、點(diǎn)擊事件的小例子
- 使用JS或jQuery模擬鼠標(biāo)點(diǎn)擊a標(biāo)簽事件代碼
- js監(jiān)聽鼠標(biāo)點(diǎn)擊和鍵盤點(diǎn)擊事件并自動(dòng)跳轉(zhuǎn)頁面
相關(guān)文章
如何動(dòng)態(tài)的導(dǎo)入js文件具體該怎么實(shí)現(xiàn)
如何需要進(jìn)行動(dòng)態(tài)的導(dǎo)入js文件,那么下面的方法或許可以幫助到大家2014-01-01
js當(dāng)一個(gè)變量為函數(shù)時(shí) 應(yīng)該注意的一點(diǎn)細(xì)節(jié)小結(jié)
變量testFun為一個(gè)匿名函數(shù),匿名函數(shù)返回的一個(gè)testFun.init對象(也是一個(gè)匿名函數(shù))2011-12-12
echarts數(shù)據(jù)可視化實(shí)現(xiàn)多個(gè)柱狀堆疊圖頂部顯示總數(shù)示例
這篇文章主要為大家介紹了echarts實(shí)現(xiàn)多個(gè)柱狀堆疊圖頂部顯示總數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
JavaScript中this的四個(gè)綁定規(guī)則總結(jié)
相信大家都知道,ES5及之前時(shí)代的JavaScript中this的綁定機(jī)制是讓很多開發(fā)者頭疼不已的事情。this 的綁定變化多端,讓筆者也吃了不少虧。所以本文總結(jié)了this的四條綁定規(guī)則,在此記錄,以防自己遺忘,也方便他人參考借鑒。下面來一起看看吧。2016-09-09
JavaScript實(shí)現(xiàn)三級聯(lián)動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)三級聯(lián)動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
HTML+JavaScript實(shí)現(xiàn)掃雷小游戲
這篇文章主要為大家詳細(xì)介紹了HTML+JavaScript實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
JavaScript文件的同步和異步加載的實(shí)現(xiàn)代碼
本篇文章主要介紹了JavaScript文件的同步和異步加載的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08

