는 2astalavista @ I 인해 명성 말씀 드릴 수 없습니다, 그래서 내가 '바로 그겁니다, 여기를 놓을 게요 이 작업을 수행하지 않아도됩니다.
나는 대답을 시도했지만 캔버스 왼쪽/위의 다른 요소에서만 문제를 해결합니다. 나를 위해 그것은 캔버스의 마진을 고려하지 않았습니다. 내가 제대로했는지 나는 모른다. 또한 HTML 양면 솔루션의 아이디어를 좋아하지 않습니다. 누군가는 Html을 바꾸고, "position : relative;"를 잊어 버린다. 추적하기가 거의 불가능한 버그가 발생합니다.
Nech의 솔루션을 사용했지만 요소가 캔버스 위에 있거나 위의 위치에있을 때 올바르게 작동하지 않는 것으로 나타났습니다. 그것은 단지 캔버스의 마진과 같은 것들을 고려합니다.
다음 코드로 해결했지만 Firefox 부분은 Chrome 부분에 비해 95-99 % 정도 정확합니다. 그러나이 작업이 완료 가져옵니다
function getEventX(event){
if (event.offsetX) {
return event.offsetX;
}
if (event.clientX) {
var currentElement = event.currentTarget;
var offsetLeft = currentElement.offsetLeft;
while(currentElement.parentElement && currentElement.parentElement.offsetLeft){
currentElement = currentElement.parentElement;
offsetLeft += currentElement.offsetLeft;
}
return event.clientX - offsetLeft;
}
return null;
};
function getEventY(event){
if (event.offsetY) {
return event.offsetY;
}
if (event.clientY) {
var currentElement = event.currentTarget;
var offsetTop = currentElement.offsetTop;
while(currentElement.parentElement && currentElement.parentElement.offsetTop){
currentElement = currentElement.parentElement;
offsetTop += currentElement.offsetTop;
}
return event.clientY - offsetTop;
}
return null;
};
는 또한 기능을 물려있는 캔버스를 제거, 당신이 캔버스를 얻을 수 있습니다 :
event.currentTarget;
여러 개의 캔버스를 처리 할 때 아마 더 나은.
HTML 5, 'onMouseMove' 인라인 _ 및 _ 대문자 속성. 그런 엉망';)' – Bojangles
첫 번째 코멘트는 HTML 속성을 사용하여 이벤트 핸들러를 설정하지 말아야한다는 것입니다. 순수한 자바 스크립트로 훨씬 더 많은 안정성을 발견 할 수 있습니다. 어쩌면 jQuery 나 Prototype.js를 조금이라도 던져서 더 쉽게 만들 수 있습니다. –