原生js獲取鼠標坐標方法全面講解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y


關於js鼠標事件綜合各大瀏覽器能獲取到坐標的屬性總共以下五種

  • event.clientX/Y
  • event.pageX/Y
  • event.offsetX/Y
  • event.layerX/Y
  • event.screenX/Y

clientX/Y:

clientX/Y獲取到的是觸發點相對瀏覽器可視區域左上角距離,不隨頁面滾動而改變

兼容性:所有瀏覽器均支持

pageX/Y:

pageX/Y獲取到的是觸發點相對文檔區域左上角距離,會隨着頁面滾動而改變

設置<body  style="width:2000px;height:200px;">讓頁面滾動,發現clientX與pageX的值不一樣

兼容性:除IE6/7/8不支持外,其余瀏覽器均支持

offsetX/Y:

offsetX/Y獲取到是觸發點相對被觸發dom的左上角距離,不過左上角基准點在不同瀏覽器中有區別,其中在IE中以內容區左上角為基准點不包括邊框,如果觸發點在邊框上會返回負值,而chrome中以邊框左上角為基准點。

兼容性:IE所有版本,chrome,Safari均完美支持,Firefox不支持

 layerX/Y:

layerX/Y獲取到的是觸發點相對被觸發dom左上角的距離,數值與offsetX/Y相同,這個變量就是firefox用來替代offsetX/Y的,基准點為邊框左上角,但是有個條件就是,被觸發的dom需要設置為position:relative或者position:absolute,否則會返回相對html文檔區域左上角的距離

兼容性:IE6/7/8不支持,opera不支持,IE9/10和Chrome、Safari均支持

screenX/Y:

screenX/Y獲取到的是觸發點相對顯示器屏幕左上角的距離,不隨頁面滾動而改變

兼容性:所有瀏覽器均支持

 

/*我測試的clientX ,pageX代碼*/

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    *{margin:0;padding:0;}
    #wrap{
        margin:30px auto;
        width:500px;
        height:200px;
        border:1px solid #ccc;
        text-align: center;
        overflow: scroll;
    }
    #wrap p{
        display: block;
        height:400px;
    }
    </style>
</head>
<body style="height:2000px; width:20000px">
    <div id="wrap">
        <p>測試pageX和clientX的區別</p>
    </div>
    <script>
    window.onload=function(){
        var oDiv = document.getElementById('wrap');
        oDiv.onclick = function(e){
            e = e || window.event;
            console.log('e.clientX:'+e.clientX);
            console.log('e.pageX:'+e.pageX);
        }

    }
    </script>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM