如何用javascript獲取指針的位置

本篇內(nèi)容介紹了“如何用javascript獲取指針的位置”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

遼陽縣網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,遼陽縣網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為遼陽縣近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的遼陽縣做網(wǎng)站的公司定做!

javascript獲取指針的位置的方法:使用事件對象的pageX和pageY,或者clientX和clientY屬性,并且配合scrollLeft和scrollTop屬性,這樣就可以計算出指針的位置了。

如何用javascript獲取指針的位置

本文操作環(huán)境:windows10系統(tǒng)、javascript 1.8.5、thinkpad t480電腦。

要想獲取指針在頁面中的位置,可以使用事件對象的pageX和pageY,或者是 clientX 和 clientY(兼容 IE)屬性,同時還需要配合 scrollLeft 和 scrollTop 屬性,這樣就可以計算出鼠標(biāo)指針在頁面中的位置了。

//獲取鼠標(biāo)指針的頁面位置
//參數(shù):e表示當(dāng)前事件對象
//返回值:返回鼠標(biāo)相對頁面的坐標(biāo),對象格式(x,y)
function getMP (e) {
    var e = e || window.event;
    return {
        x : e.pageX || e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft),
        y : e.pageY || e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)
    }
}

pageX 和 pageY 事件屬性不被 IE 瀏覽器支持,而 clientX 和 clientY 事件屬性又不被 Safari 瀏覽器支持,因此可以混合使用它們以兼容不同瀏覽器。對于怪異模式來說,body 元素代表頁面區(qū)域,而 html 元素被隱藏,但是標(biāo)準(zhǔn)模式以 html 元素代表頁面區(qū)域,而 body 元素僅是一個獨(dú)立的頁面元素,所以需要兼容這兩種解析方式。

下面示例演示了如何調(diào)用上面擴(kuò)展函數(shù) getMP() 捕獲當(dāng)前鼠標(biāo)指針在文檔中的位置。

<body style="width:2000px;height:2000px;">
    <textarea id="t" cols="15" rows="4" style="position:fixed;left:50px;top:50px;"></textarea>
</body>
<script>
    var t = document.getElementById("t");
    document.onmousemove = function(e){
        var m = getMP(e);
        t.value ="mouseX = " + m.x  + "\n" + "mouseY = " + m.y
    }
</script>

演示效果如下:

如何用javascript獲取指針的位置

獲取指針的相對位置

使用 offsetX 和 offsetY 或者 layerX 和 layerY 可以獲取鼠標(biāo)指針相對定位包含框的偏移位置。如果使用 offsetLeft 和 offsetTop 屬性獲取元素在定位包含框中的偏移坐標(biāo),然后使用 layerx 屬性值減去 offsetLeft 屬性值,使用 layery 屬性值減去 offsetTop 屬性值,即可得到鼠標(biāo)指針在元素內(nèi)部的位置。

//獲取鼠標(biāo)指針在元素內(nèi)的位置
//參數(shù):e表示當(dāng)前事件對象,o表示當(dāng)前元素
//返回值:返回相對坐標(biāo)對象
function getME (e, o) {
    var e = e || window.event;
    return {
        x : e.offsetX || (e.layerX - o.offsetLeft),
        y : e.offsetY || (e.layerY - o.offsetTop)
    }
}

在實(shí)踐中上面函數(shù)存在以下兩個問題:

  • Mozilla 類型和 Safari 瀏覽器以元素邊框外壁的左上角為參照點(diǎn)。

  • 其他瀏覽器則是以元素邊框內(nèi)壁的左上角為坐標(biāo)原點(diǎn)。

考慮到邊框?qū)κ髽?biāo)位置的影響,當(dāng)元素邊框很寬時,必須考慮如何消除邊框?qū)τ谑髽?biāo)位置的影響。但是,由于邊框樣式不同,它存在 3 像素的默認(rèn)寬度,為獲取元素的邊框?qū)嶋H寬度帶來了麻煩。需要設(shè)置更多的條件,來判斷當(dāng)前元素的邊框?qū)挾取?/p>

示例

完善后的獲取鼠標(biāo)指針在元素內(nèi)的位置擴(kuò)展函數(shù)如下:

//完善獲取鼠標(biāo)指針在元素內(nèi)的位置
//參數(shù):e表示當(dāng)前事件對象,o表示當(dāng)前元素
//返回值:返回鼠標(biāo)相對元素的坐標(biāo)位置,其中x表示x軸偏移距離,y表示y軸偏移距離
function getME(e, o){
    var e = e || window.event;
    //獲取元素左側(cè)邊框的寬度
    //調(diào)用getStyle()擴(kuò)展函數(shù)獲取邊框樣式值,并嘗試轉(zhuǎn)換為數(shù)值,如果轉(zhuǎn)換成功,則賦值。
    //否則判斷是否定義了邊框樣式,如果定義邊框樣式,且值不為none,則說明邊框?qū)挾葹槟J(rèn)值,即為3像素。
    //如果沒有定義邊框樣式,且寬度值為auto,則說明邊框?qū)挾葹?
    var bl = parseInt(getStyle(o, "borderLeftWidth")) || ((o.style.borderLeftStyle && o.style.borderLeftStyle != "none" )? 3 : 0);
    //獲取元素頂部邊框的寬度,設(shè)計思路與獲取左側(cè)邊框方法相同
    var bt = parseInt(getStyle(o, "borderTopWidth")) || ((o.style.borderTopStyle && o.style.borderTopStyle !="none" ) ? 3 : 0);
    var x = e.offsetX || (e.layerX - o.offsetLeft - bl);  // 一般瀏覽器下鼠標(biāo)偏移值
    //兼容Mozilla類型瀏覽器,減去邊框?qū)挾?nbsp;
    var y = e.offsetY || (e.layerY - o.offsetTop - bt); // 一般瀏覽器下鼠標(biāo)偏移值 
    //兼容Mozilla類型瀏覽器,減去邊框?qū)挾?nbsp;
    var u = navigator.userAgent; // 獲取瀏覽器的用戶數(shù)據(jù) 
    if( (u.indexOf("KHTML") > - 1) ||(u.indexOf("Konqueror") > - 1) || (u.indexOf("AppleWebKit") > - 1) 
    ){ // 如果是Safari瀏覽器,則減去邊框的影響 
        x -= bl; y -= bt; 
    } return { // 返回兼容不同瀏覽器的鼠標(biāo)位置對象,以元素邊框內(nèi)壁左上角為定位原點(diǎn) 
        x : x, y : y 
    }   
}

演示效果如下:

如何用javascript獲取指針的位置

“如何用javascript獲取指針的位置”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

文章題目:如何用javascript獲取指針的位置
網(wǎng)站路徑:http://bm7419.com/article32/goshpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)頁設(shè)計公司、標(biāo)簽優(yōu)化網(wǎng)站收錄、Google微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司