screenX
/Y
、clientX
/Y
およびpageX
/Y
の違いは何ですか?
IPad Safariの場合も、計算はデスクトップの場合と似ていますか。それとも、ビューポートのために違いがありますか。
あなたが私に例を示すことができればそれは素晴らしいでしょう。
JavaScriptの場合:
pageX
、pageY
、screenX
、screenY
、clientX
、およびclientY
は、ある点が参照点からの物理的な「CSSピクセル」の数を示す数値を返します。イベントポイントはユーザーがクリックした場所で、参照ポイントは左上のポイントです。これらのプロパティは、その基準点からの水平方向と垂直方向の距離を返します。
pageX
とpageY
:
ブラウザの完全にレンダリングされたコンテンツ領域の左上を基準にしています。この参照点は、URLバーと左上の戻るボタンの下にあります。このポイントはブラウザウィンドウ内のどこにあってもよく、ページ内に埋め込まれたスクロール可能なページがあり、ユーザがスクロールバーを動かした場合は実際に場所を変更することができます。
screenX
とscreenY
:
実際の画面/モニターの左上を基準にして、この参照点はモニターの数またはモニターの解像度を増減した場合にのみ移動します。
clientX
とclientY
:
ブラウザウィンドウのコンテンツ領域の左上隅( ビューポート )。ユーザーがブラウザ内からスクロールバーを移動しても、この点は移動しません。
どのブラウザがどのプロパティをサポートしているかを視覚的に示します。
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>
これはpageY
とclientY
の違いを説明する図です。
pageX
とclientX
についてもそれぞれ同じです。
pageX/Y
座標は、レンダリングされたページ全体の左上隅を基準にしています(スクロールによって非表示になっている部分を含む)。
clientX/Y
座標はページの表示部分の左上隅を基準にしていますが、ブラウザウィンドウでは「見られます」。
おそらくscreenX/Y
は必要ないでしょう
<html>
要素に相対的な座標を提供します。viewport
に相対的な座標を提供します。screen
に関連する座標を提供します。計算がデスクトップブラウザーとモバイルブラウザーで類似している場合の最後の質問について...より良い理解のために-モバイルブラウザーで-2つの新しい概念を区別する必要があります:layout viewportおよびビジュアルビューポート。視覚的なビューポートは、現在画面に表示されているページの一部です。レイアウトビューポートは、デスクトップブラウザーでレンダリングされたページ全体の同義語です(現在のビューポートでは表示されないすべての要素を含む)。
モバイルブラウザでは、pageX
とpageY
はCSSピクセル単位のページに相対的であるため、ドキュメントページに対するマウス座標を取得できます。一方、clientX
とclientY
は、ビジュアルビューポートに関連してマウス座標を定義します。
ここには、ビジュアルビューポートとレイアウトビューポートの違いに関する別のstackoverflowスレッドがあります。 ビジュアルビューポートとレイアウトビューポートの違い?
このページに直接イベントを追加して、クリックして自分自身のために手助けしてくれたのが私の役に立ちました!開発者ツール/ 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は同じです。
これらの違いは、現在どのブラウザを参照しているかによって大きく異なります。それぞれがこれらのプロパティを異なる方法で実装しているか、まったく実装していません。 Quirksmode には、DOMやJavaScriptイベントなどのW3C標準に関するブラウザの違いに関する優れたドキュメントがあります。