Opened 8 years ago
Closed 8 years ago
#16438 closed defect (fixed)
touch.release behavior different for mouse vs. touch
Reported by: | bill | Owned by: | bill |
---|---|---|---|
Priority: | undecided | Milestone: | 1.9 |
Component: | Events | Version: | 1.8.1 |
Keywords: | Cc: | Eric Durocher | |
Blocked By: | Blocking: |
Description (last modified by )
When you setup a touch.release listener on a node:
on(nodeX, touch.release, callback)
...the behavior is different for mouse vs. touch:
- on desktop, the callback fires if the mouse button is released while the cursor is over nodeX (regardless of where the cursor was on mousedown)
- on touch devices, the callback only fires if the touch event started on nodeX, and regardless of where the user dragged his finger before removing it from the screen
Technically dojo/touch is working according to its spec -- listening to mouseup or touchend -- but the behavior is not in the spirit of dojo/touch, which is to normalize behavior between mouse and touch events.
So it's not a bug per se, but something that leads to bugs in applications that assume touch.release works the same for mouse and touch.
As a side note, most of the uses of touch.release within dojo are on the document object itself, rather than a node within the document, so there's no issue of which node the event is fired on. It looks like the one case where the listener is on a different node is for dojo/dnd/Moveable, but in that case the finger goes down and up on the same node because the node moves along with the finger.
Not sure if it's kosher to "fix" this behavior before 2.0, although we could uncontroversially add a new normalized release event. Or two normalized events: I think a lot of code, such as the code to drag the sliders in BorderContainer, would actually prefer touch.release to work for mouse events the same way it currently works for touch events.
This ticket reduced from #16427.
Change History (6)
comment:1 Changed 8 years ago by
comment:2 Changed 8 years ago by
Description: | modified (diff) |
---|
comment:3 Changed 8 years ago by
Cc: | Eric Durocher added |
---|
@edurocher - I was going to mark this for 2.0 since it technically breaks back-compat, but maybe we need to do it for 1.9, to make behavior consistent across Webkit and Windows Surface.
I'm talking about your patch on #16175 which equates touch.release to MSPointerUp (on Surface). ISTM MSPointerUp makes touch.release fire based on the node the finger is over when it's removed from the screen, rather than the node that was originally touched. Can you confirm that?
comment:4 Changed 8 years ago by
I cannot say what happens on an actual touch device since I don't have any yet. For mouse events, running test_touch.html on Windows 8 / IE10 + my patch (i.e. listening to MSPointer events), the behavior is the same as you describe for desktop: nodeX receives touch.release if and only if you release inside nodeX.
Can anybody else test this on an actual Windows 8 touch-enabled device?
comment:5 Changed 8 years ago by
Milestone: | tbd → 1.9 |
---|---|
Owner: | changed from Kris Zyp to bill |
Status: | new → assigned |
#16427 is a duplicate of this ticket.