鼠标指针定位解析及兼容性方法

当事件发生时,获取鼠标指针的位置是很重要的事件。这原本是一个很简单的问题,但是由于浏览器的不兼容性,给开发带来了挑战。不同浏览器分别在各自事件对象中定义了不同的属性,详见下方图表。

属性 说明   兼容性
clientX 浏览器窗口左上顶角为原点,定位X轴坐标 所有浏览器,不兼容Safari
clientY 浏览器窗口左上顶角为原点,定位Y轴坐标 所有浏览器,不兼容Safari
offsetX 当前事件的目标对象左上顶角为原点,定位X轴坐标 所有浏览器,不兼容Mozilla
offsetY 当前事件的目标对象左上顶角为原点,定位Y轴坐标 所有浏览器,不兼容Mozilla
pageX document对象(即文档窗口)左上顶角为原点,定位X轴坐标 所有浏览器,不兼容IE
pageY document对象(即文档窗口)左上顶角为原点,定位Y轴坐标 所有浏览器,不兼容IE
screenX 计算机屏幕左上角为原点,定位X轴坐标 所有浏览器
screenY 计算机屏幕左上角为原点,定位Y轴坐标 所有浏览器
layerX 最近的绝对定位的父元素(如果没有,则为document对象)左上顶角为原点,定位X轴坐标 Mozilla 和 Safari
layerY 最近的绝对定位的父元素(如果没有,则为document对象)左上顶角为原点,定位Y轴坐标  Mozilla 和 Safari

兼容不同浏览器的鼠标定位设计方案:

function getMousePos(event){
    var posX = 0,posY = 0;                        //定义坐标变量初始化
    var event = event || window.event;            //标准化事件对象
    if(event.pageX || event.pageY){               //如果浏览器支持该属性,则采用
        posX = event.pageX;
        posY = event.pageY;        
    }else if(event.clientX || event.clientY){     //否则,如果浏览器支持该属性,则采用
        posX = event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        posY = event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    };
    return {
        posX : posX,
        posY : posY
    };
}

HTML页面调用方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>兼容不同浏览器的鼠标定位方法</title>
    <script src="js/mousePos.js"></script>
    <script>
        document.onmousemove = function(event){
            console.log('鼠标X轴坐标值:' + getMousePos(event).posX + '鼠标Y轴坐标值:' + getMousePos(event).posY);
        }
    </script>
</head>
<body>
    <p>兼容不同浏览器的鼠标定位方法</p>
</body>
</html>
原文地址:https://www.cnblogs.com/lvmylife/p/5368727.html