Closed Bug 122665 Opened 23 years ago Closed 23 years ago

Event.layerX should be Event.offsetX

Categories

(Core :: DOM: Events, enhancement)

enhancement
Not set
normal

Tracking

()

VERIFIED WONTFIX

People

(Reporter: giscardg, Assigned: joki)

Details

From Bugzilla Helper: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.7) Gecko/20011221 BuildID: Gecko/20011221 For compatibility with Internet Explorer. The event property layerX should be wrapped as Event.offsetX
confirming.
Hardware: PC → All
really confirming
Status: UNCONFIRMED → NEW
Ever confirmed: true
I strongly disagree with any project to rename evt.layerX/Y properties as MSIE 5+'s event.offsetX/Y. These event properties are absolutely not the same. In 1 sentence, their major difference is about whether the target element is (absolutely or relatively) positioned or not, or if the target element is within a (absolutely or relatively) positioned containing element. MSIE event.offsetX/Y properties will store the X/Y mouse coordinate within the target element (i.e. clicking inside an <img>), and this, regardless of positioning context. There is no built-in equivalent to MSIE's event.offsetX/Y in NS 6+. NS 6+ evt.layerX/Y properties are NOT the MSIE 5.x and 6 equivalent of event.offsetX/Y properties. Under NS 6+, it is possible to calculate the offsetX/Y values. Here's a way to get the equivalent of MSIE 5+ event.offsetX/Y properties: var Element = evt.target ; var CalculatedTotalOffsetLeft = CalculatedTotalOffsetTop = 0 ; while (Element.offsetParent) { CalculatedTotalOffsetLeft += Element.offsetLeft ; CalculatedTotalOffsetTop += Element.offsetTop ; Element = Element.offsetParent ; } OffsetXForNS6 = evt.pageX - CalculatedTotalOffsetLeft ; OffsetYForNS6 = evt.pageY - CalculatedTotalOffsetTop ; NS 6+ evt.layerX/Y properties calculate the distance from the left/top corner of an element if it is absolutely or relatively positioned; if it's not positioned, then the values are the distance from the left/top of its closest absolutely or relatively positioned containing element. In case the target element has no positioned element within the containment hierarchy, then the body element is the positioned containing element[1]. Here's an interactive demo on evt.layerX/Y : http://www.geocities.com/Area51/Realm/8655/HTMLJavascriptCSS/PositioningEvtLayer.html ---- [1]: there are 2 exceptions to this: input type="text" and textarea elements. When an event is fired, the evt.layerX/Y will return the X/Y mouse coordinate within the input type="text" or within the textarea regardless of positioning context. These 2 exceptions AFAIK are undocumented.
Wontfix then, since the two are different things. Thanks for the info!
Status: NEW → RESOLVED
Closed: 23 years ago
Resolution: --- → WONTFIX
verifying
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.