캔버스 요소가 있고 그것을 클릭하면 e.clientX (Y) 또는 e.screenX (Y)로 클릭 위치가 표시됩니다. 이상한 일이 일어나고 있습니다. Y 값은 항상 너무 높습니다. 이 이미지를보십시오 : http://img840.imageshack.us/img840/268/eventq.jpg. 어떤 이데아가 그렇게 높은 이유는 무엇입니까?클릭 이벤트 위치 (Y)가 너무 높습니다.
0
A
답변
0
나는 당신이 무슨 일이 일어 났는지 말할 수있을 것이라고 확신한다. 캔버스에 상대적인 좌표는 아니지만 뷰포트를 기준으로합니다. 또한 패딩을 포함하는지 여부에 따라 브라우저에 따라 다릅니다.
정상 좌표로 변환하십시오. 귀하의 경우에는 캔버스의 오프셋을 빼는 작업이 필요합니다.
+0
Firefox 3.6에서 offsetX이 작동하지 않습니다. – thomas
+0
죄송합니다. offsetX을 사용하지 말고 게시물을 편집했습니다. – buddhabrot
1
ClientX와 Y를 가져 와서 캔버스의 위치를 빼면됩니다.
이 예
불필요하게 자세한 그냥 단계를 보여주는 것입니다 :var canvas = document.getElementById('game');
var canvasX, canvasY;
canvas.addEventListener('click', function(event) {
canvasX = canvas.offsetLeft;
canvasY = canvas.offsetTop;
var eventX = event.clientX;
var eventY = event.clientY;
var relX = eventX - canvasX;
var relY = eventY - canvasY;
alert('X = ' + relX + ', Y = ' + relY);
});
근무 샘플 : http://jsfiddle.net/JfhJF/
관련 문제
- 1. Div 최대 높이가 너무 높습니다.
- 2. AVCDecoder : 비디오 해상도가 너무 높습니다. 거부하십시오.
- 3. 이미지의 마우스 클릭 위치
- 4. UIWebView 클릭 이벤트 클릭
- 5. 클릭 이벤트 내에서 클릭 이벤트 할당
- 6. MySQL의 innodb_lock_wait_timeout 값이 높습니다.
- 7. Android listview 위치 및 클릭 이벤트 핸들 문제
- 8. 추가 클릭 이벤트 (JQuery와 + UI)
- 9. PHP 클릭 이벤트 핸들러
- 10. 클릭 이벤트/함수 응축
- 11. 안드로이드에서 AutoCompleteTextView 클릭 이벤트
- 12. jquery 클릭 이벤트
- 13. Jquery 및 클릭 이벤트
- 14. 버튼 클릭 이벤트
- 15. 크리스탈 리포트 클릭 이벤트
- 16. DataGridview의 버튼 클릭 이벤트
- 17. jTable에서 클릭 이벤트 - Java
- 18. HTML5 캔버스 클릭 이벤트
- 19. JQuery와 클릭 이벤트
- 20. 안드로이드 글로벌 클릭 이벤트
- 21. 다수의 클릭 이벤트
- 22. Search 버튼 클릭 이벤트
- 23. Zingchart 클릭 이벤트 처리
- 24. 안드로이드에서 더블 클릭 이벤트
- 25. ButtonField 클릭 이벤트
- 26. JQuery와 클릭 이벤트
- 27. JQuery와 바인드 클릭 이벤트
- 28. Jquery 클릭 이벤트 애니메이션
- 29. 클릭 이벤트 on .swf
- 30. 장애인 버튼 ('클릭') 이벤트
캔버스 요소 페이지의 첫 번째/상위 요소인가? 스크린 샷을 통해 페이지 상단을 볼 수 없습니다. ClientY는 현재 요소와 관련이 없으며 페이지 (뷰포트) 자체와 관련이 있습니다. – Fosco
아니요 일부 텍스트가 있습니다 ... 캔버스 요소를 기준으로 상대를 가져 오는 방법이 있습니까? – thomas