screenX/Y、clientX/Y 和 pageX/Y 有什么区别?

IT技术 javascript ipad safari mouse-position
2021-01-16 14:57:10

screenX/ YclientX/YpageX/之间有什么区别Y

同样对于 iPad Safari,计算是否与在桌面上相似——或者由于视口而存在一些差异?

如果你能给我举个例子,那就太好了。

6个回答

这是一张图片,解释了pageY之间的区别clientY

pageY 与 clientY

pageXclientX分别相同


pageX/Y 坐标相对于整个渲染页面的左上角(包括滚动隐藏的部分),

clientX/Y坐标相对于页面可见部分的左上角,通过浏览器窗口“看到”。

看演示

或者试试这个片段:

注意:您可能永远不需要screenX/Y

我想在页面上的特定矩形区域上绑定单击事件,因此pageX/pageY应该使用clientX/clientY?
2021-03-19 14:57:10
注意形象化什么screenX/Y是?
2021-03-24 14:57:10
太棒了,感谢您的演示,比文字解释得更好。
2021-03-30 14:57:10
2021-04-08 14:57:10
简单的 x 和 y 怎么样?当我尝试时,它们似乎与 clientX/Y 相同,但我没有找到有关它的明确参考
2021-04-10 14:57:10

在 JavaScript 中:

pageX, pageY, screenX, screenY, clientX, 并clientY返回一个数字,该数字指示事件点距参考点的逻辑“CSS 像素”数。事件点是用户点击的地方,参考点是左上角的一个点。这些属性返回事件点与该参考点的水平和垂直距离。

pageXpageY
相对于浏览器中完全呈现的内容区域的左上角。此参考点位于左上角的 URL 栏和后退按钮下方。该点可以位于浏览器窗口中的任何位置,如果页面中嵌入了可滚动页面并且用户移动滚动条,则该点实际上可以更改位置。

screenXscreenY
相对于物理屏幕/显示器的左上角,仅当您增加或减少显示器数量或显示器分辨率时,此参考点才会移动。

clientXclientY
相对于浏览器窗口内容区域(视口)的左上边缘即使用户从浏览器中移动滚动条,该点也不会移动。

对于哪些浏览器支持哪些属性的视觉效果:

http://www.quirksmode.org/dom/w3c_cssom.html#t03

<script>
    function showCoordinates(event){
        var x = event.clientX;
        var y = event.clientY;
        alert(`X coordinates: ${x}, Y coordinates: ${y}`);
    }
</script>
<p onmousedown="showCoordinates(event)">
    Click this paragraph, and an alert box will show the x
    and y coordinates of the mouse relative to the viewport
</p>

我认为这是对 pageX / pageY(以及由此产生的问题)的误导性或至少无效的解释,因为它引用了 URL 栏和后退按钮,而根据页面内容进行更好的解释,例如视觉解释答案告诉。此外,w3schools 示例没有帮助,因为它只输出一对 x/y,并且其中没有滚动来证明差异。
2021-03-14 14:57:10
我认为@NavpreetKaur 是对的。这个答案在 clientX 和 pageX 方面正好相反
2021-03-14 14:57:10
PageX/PageY 和 ClientX/clientY 解释互换。你应该纠正它。这是误导
2021-03-22 14:57:10
w3schools 的链接现在似乎只能通过参考部分获得:w3schools.com/jsref/tryit.asp?filename=try_dom_event_clientxy
2021-04-06 14:57:10
并且在 jquery offsetX 和 offsetY 是相对于父容器
2021-04-09 14:57:10
  1. pageX/Y<html>以 CSS 像素为单位给出相对于元素的坐标
  2. clientX/Y给出相对于viewportCSS 像素的坐标
  3. screenX/Y给出相对于screen设备像素的坐标

关于您的最后一个问题,桌面和移动浏览器上的计算是否相似......为了更好地理解 - 在移动浏览器上 - 我们需要区分两个新概念:布局视口视觉视口视觉视口是当前显示在屏幕上的页面部分。布局视口是在桌面浏览器上呈现的完整页面的同义词(包含在当前视口上不可见的所有元素)。

在移动浏览器上,pageXpageY仍然以 CSS 像素相对于页面,因此您可以获得相对于文档页面的鼠标坐标。另一方面clientXclientY定义与视觉视口相关的鼠标坐标

关于视觉视口和布局视口之间的差异,这里还有另一个 stackoverflow 线程:视觉视口和布局视口之间的区别?

另一个很好的资源:http : //www.quirksmode.org/mobile/viewports2.html

怎么样offsetX/Y
2021-04-06 14:57:10

我不喜欢和理解可以通过视觉来解释的东西。

在此处输入图片说明

帮助我的是直接在此页面上添加一个事件并为自己单击!在开发人员工具/Firebug 等中打开您的控制台并粘贴:

document.addEventListener('click', function(e) {
  console.log(
    'page: ' + e.pageX + ',' + e.pageY,
    'client: ' + e.clientX + ',' + e.clientY,
    'screen: ' + e.screenX + ',' + e.screenY)
}, false);
Click anywhere

使用此代码段,您可以在滚动、移动浏览器窗口等时跟踪您的点击位置。

请注意,当您一直滚动到顶部时,pageX/Y 和 clientX/Y 是相同的!