2017-02-22 1 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

2 가지 일을 수정해야 :

  1. event.clientYevent.clientXevent.ClientYevent.ClientX를 확인합니다. clientX 및 clientY의 작은 문자에 주목하십시오.
  2. 대신 사용 document.addEventListener("click", handleClick);document.body. addEventListener("click", handleClick);

비 노드

+0

감사합니다. 하지만 궁금한 점, 왜 내가 청취자에게 시체를 추가해야만 했습니까? 또한 clientX 값과 true 값 (getPosition()을 사용하여 계산 된 값)이 다른지 여부를 확인하기 위해 테스트를 실행했습니다. 어떤 아이디어? – Shaz

+0

잘 작동합니다. 첫째로 당신 몸을 검사하기 때문에 나는 경청자를 추가하기 위하여 몸을 이용했다. 신체의 경우 그들은 작동하지 않습니다. 제발 당신을 위해 일하는 경우에 그것을 upvote하십시오 감사 –

관련 문제