2012-01-06 3 views
0

나는 이상한 것을 발견했다. SVG 모양을 그리면 마우스의 위치를 ​​반환하는 표준 방법을 사용할 때 모양의 x 및 y 특성이 해당 모양의 마우스 이벤트에 의해 반환 된 좌표와 일치하지 않기 때문에 내가 제공하는 좌표가 제공됩니다. 나는 사각형을 그리면jQueryUI 탭의 SVG에서 QuirksMode 마우스 위치가 올바르지 않습니까?

예를 들어, 다음과 같이 이벤트 루틴

shape = svgDocument.createElementNS(svgNS, "rect"); 
shape.setAttributeNS(null, "x", rect_x); 
shape.setAttributeNS(null, "y", rect_y); 
... 
shape.addEventListener("mouseover", etc); 

, 나는 쿼크 모드 알고리즘 (이하 "마우스 좌표를 검출 올바른 스크립트"를 사용하여 마우스 위치를 얻을, http://www.quirksmode.org/js/events_properties.html).

F/F 8 subtract 105 
Webkit subtract 103 
IE9 subtract 104 
Opera subtract 103 

무엇도 호기심의 것은 웹킷과 IE9 모두 evt.offsetY를 제공하고 설정이다 다음 Y 좌표, 나는 'rect_y'에 도착하기 위해, 다음과 같이 쿼크 모드 값을 해결하는 데 '올바른 위치'(정확하게 'rect_y'와 동일)로 이동하십시오. FF는 offsetY를 정의하지 않고, Opera는 그것을 1로 설정합니다.

아직까지 작업하지는 않았지만 jQueryUI 탭에있는 것으로 의심됩니다. 이걸 본 사람? 이견있는 사람?

답변

0

SVG에서는 offsetX 또는 offsetY 등이 아닌 좌표를 변환하기 위해 getScreenCTM 메서드를 사용합니다. 여기에 예제가 있습니다. http://www.carto.net/svg/eventhandling/ viewBox 좌표 부분으로 변환하는 clientX를 검색합니다. getScreenCTM 메소드가없는 ASV3와 같은 오래된 UA에 대처하기 때문에 약간 복잡합니다.

관련 문제