2017-02-22 2 views
0

クリックしたx座標とy座標の相対値と親コンテナのオフセットを特定して、マウスがクリックされた真の値ウェブページマウスクリックxとyの正確な値を取得しようとしています。NaN

問題は次のとおりです。NaNをxとyとして画面に表示していますか?理由は分かりませんか?

// get the position of click 
function getPosition(el) { 
  var xPosition = 0; 
  var yPosition = 0; 
  
  while (el) { 
    if (el.nodeName == "BODY") { 
      // deal with browser quirks with body/window/document and page scroll 
      var xScrollPos = el.scrollLeft || document.documentElement.scrollLeft; 
      var yScrollPos = el.scrollTop || document.documentElement.scrollTop; 
  
      xPosition += (el.offsetLeft - xScrollPos + el.clientLeft); 
      yPosition += (el.offsetTop - yScrollPos + el.clientTop); 
    } else { 
      xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft); 
      yPosition += (el.offsetTop - el.scrollTop + el.clientTop) 
    } 
  
    el = el.offsetParent; 
  } 
  return { 
    x: xPosition, 
    y: yPosition, 
    a: "hahah", 
  }; 
} 



function handleClick(event) { 
    // Return the current element clicked on 
    var el = event.currentTarget; 
    // Return the offset values of the element clicked on 
    var relOffsetValues = getPosition(el); 

    // Get the clicked values that is relative to the element 
    var valuesRelToClickedElementX = event.ClientX; 
    var valuesRelToClickedElementY = event.ClientY; 

    // Find the true value of x and y by adding the offset and the to clicked value of x and y 
    var realValueX = relOffsetValues.x + valuesRelToClickedElementX; 
    var realValueY = relOffsetValues.y + valuesRelToClickedElementY; 

    // display the x and y of the mouse click 
    alert("x:" + realValueX + ", y:" + realValueY); 
} 

// Set up event handlers according to standards 
window.addEventListener("load", function(){ 
    document.addEventListener("click", handleClick); 
}); 
+0

は、多分それはです。 clientX/clientY。 –

+0

修正しました。まだNaNを取得しています – Shaz

答えて

1

2のものは仕事に補正する必要があります

  1. event.clientXevent.clientYからevent.ClientYevent.ClientXを行います。 clientXとclientYの小文字に注意してください。 Clientx/yが小文字のCで始まる必要がありますので、代わりにdocument.addEventListener("click", handleClick);使用document.body. addEventListener("click", handleClick);

  • あるVinod

  • +0

    これはうまくいきました。しかし、なぜ私はリスナーに身体を追加しなければならないのでしょうか?また、clientXの値と真の値(getPosition()を使って計算された)が異なっていないかどうかを調べるためにテストを実行しました。何か案は? – Shaz

    +0

    良いです。まず、あなたがボディをチェックしているので、私はリスナーを追加するためにボディを使用しました。体の場合、彼らは動作しません。あなたがうまくいくなら、それをupvoteしてくださいありがとう –

    関連する問題