2017-02-22 53 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/Y應該以小寫字母c開始。 clientX/clientY。 –

+0

修正了它。仍然得到NaN – Shaz

回答

1

兩件事情需要加以糾正工作:

  1. event.ClientXevent.clientXevent.ClientYevent.clientY。注意clientX和clientY中的小寫字母。的
  2. 代替document.addEventListener("click", handleClick);使用document.body. addEventListener("click", handleClick);

維諾德

+0

好的,謝謝它的工作。但是想知道,爲什麼我必須給聽衆添加身體?此外,我運行了一個測試,以查看clientX值和真實值(使用getPosition()計算)是否不同。有任何想法嗎? – Shaz

+0

很好用。首先,因爲您正在檢查Body,所以我使用body來添加偵聽器。在身體的情況下,他們不會工作。如果爲你工作,請爲此付諸行動謝謝 –

相關問題