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

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

也为iPad的Safari,计算是类似的桌面或有一些区别,因为视口?

如果你能指点我一个例子,那将是非常棒的。

在JavaScript中:

pageX,pageY,screenX,screenY,clientX和clientY返回一个数字,表示一个点离参考点的物理“css像素”的数量。 事件点是用户点击的地方,参考点是左上angular的一个点。 这些属性返回该参考点的水平和垂直距离。

pageX和pageY:
相对于浏览器中完全呈现的内容区域的左上angular。 该参考点位于左上方的url栏和后退button之下。 这一点可以在浏览器窗口中的任何地方,并且如果embedded页面中embedded可滚动页面并且用户移动滚动条,则可以实际改变位置。

screenX和screenY:
相对于物理屏幕/显示器的左上angular,只有在增加或减less显示器数量或显示器分辨率时,此参考点才会移动。

clientX和clientY:
相对于浏览器窗口的内容区域( 视窗 )的左上angular。 即使用户从浏览器中移动滚动条,这一点也不会移动。

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

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

w3schools有一个在线的Javascript解释器和编辑器,所以你可以看到每个做什么

http://www.w3schools.com/jsref/tryit.asp?filename=try_dom_event_clientxy

<!DOCTYPE html> <html> <head> <script> function show_coords(event) { var x=event.clientX; var y=event.clientY; alert("X coords: " + x + ", Y coords: " + y); } </script> </head> <body> <p onmousedown="show_coords(event)">Click this paragraph, and an alert box will alert the x and y coordinates of the mouse pointer.</p> </body> </html> 

这是一张解释pageYclientY之间差异的图片。

pageY vs clientY

pageXclientX分别相同。


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

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

看演示

你可能永远不需要screenX/Y

  1. pageX / Y给出了CSS像素中相对于<html>元素的坐标。
  2. clientX / Y在CSS像素中给出了相对于viewport的坐标。
  3. screenX / Y给出设备像素相对于screen的坐标。

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

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

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

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

帮助我的是直接添加一个事件到这个页面,并为我自己点击! 在开发工具/ 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 

这些之间的差异将主要取决于您目前所指的浏览器。 每一个都不同地实现这些属性,或者根本不实现。 Quirksmode拥有关于浏览器在DOM和JavaScript事件等W3C标准方面的差异。

    Interesting Posts