Skip to content

Commit 977e075

Browse files
author
scottjehl
committed
improved tap event and added a quick event logger page so we can get these neglected events in order.
1 parent 2e6a396 commit 977e075

File tree

2 files changed

+68
-11
lines changed

2 files changed

+68
-11
lines changed

js/jquery.mobile.event.js

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,37 @@ $.event.special.tap = {
6363
$this = $( thisObject );
6464

6565
$this
66-
.bind( touchStartEvent, function( event ) {
67-
if ( event.which && event.which !== 1 ) {
68-
return;
66+
.bind( "mousedown touchstart", function( event ) {
67+
if ( event.which && event.which !== 1 ||
68+
//check if event fired once already by a device that fires both mousedown and touchstart (while supporting both events)
69+
$this.data( "prevEvent") && $this.data( "prevEvent") !== event.type ) {
70+
return false;
6971
}
7072

73+
//save event type so only this type is let through for a temp duration,
74+
//allowing quick repetitive taps but not duplicative events
75+
$this.data( "prevEvent", event.type );
76+
setTimeout(function(){
77+
$this.removeData( "prevEvent" );
78+
}, 800);
79+
7180
var moved = false,
7281
touching = true,
7382
origTarget = event.target,
74-
origPos = [ event.pageX, event.pageY ],
83+
origEvent = event.originalEvent,
84+
origPos = event.type == "touchstart" ? [origEvent.touches[0].pageX, origEvent.touches[0].pageY] : [ event.pageX, event.pageY ],
7585
originalType,
7686
timer;
87+
7788

78-
function moveHandler() {
79-
if ((Math.abs(origPos[0] - event.pageX) > 10) ||
80-
(Math.abs(origPos[1] - event.pageY) > 10)) {
89+
function moveHandler( event ) {
90+
if( event.type == "scroll" ){
91+
moved = true;
92+
return;
93+
}
94+
var newPageXY = event.type == "touchmove" ? event.originalEvent.touches[0] : event;
95+
if ((Math.abs(origPos[0] - newPageXY.pageX) > 10) ||
96+
(Math.abs(origPos[1] - newPageXY.pageY) > 10)) {
8197
moved = true;
8298
}
8399
}
@@ -91,17 +107,21 @@ $.event.special.tap = {
91107
}
92108
}, 750 );
93109

110+
//scroll now cancels tap
111+
$(window).one("scroll", moveHandler);
112+
94113
$this
95-
.one( touchMoveEvent, moveHandler)
96-
.one( touchStopEvent, function( event ) {
97-
$this.unbind( touchMoveEvent, moveHandler );
114+
.bind( "mousemove touchmove", moveHandler )
115+
.one( "mouseup touchend", function( event ) {
116+
$this.unbind( "mousemove touchmove", moveHandler );
117+
$(window).unbind("scroll", moveHandler);
98118
clearTimeout( timer );
99119
touching = false;
100120

101121
/* ONLY trigger a 'tap' event if the start target is
102122
* the same as the stop target.
103123
*/
104-
if ( !moved && (origTarget == event.target)) {
124+
if ( !moved && ( origTarget == event.target ) ) {
105125
originalType = event.type;
106126
event.type = "tap";
107127
$.event.handle.call( thisObject, event );

tests/functional/eventlogger.html

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
<title>jQuery Mobile: Event Logger</title>
6+
<link rel="stylesheet" href="../../themes/default/" />
7+
<link rel="stylesheet" href="../../docs/_assets/css/jqm-docs.css" />
8+
<script type="text/javascript" src="../../js/jquery.js"></script>
9+
<script type="text/javascript" src="../../js/"></script>
10+
11+
<script>
12+
$( document )
13+
.bind("tap taphold swipe swipeleft swiperight scrollstart scrollstop orientationchange",function( e ){
14+
$("#log")
15+
.prepend("<li>"+ e.type +" event; target: "+ e.target.nodeName +"</li>")
16+
.listview("refresh");
17+
18+
});
19+
</script>
20+
</head>
21+
<body>
22+
<div data-role="page" data-theme="b" id="jqm-home">
23+
<div data-role="header">
24+
<h1>Event Logger</h1>
25+
</div>
26+
27+
<div data-role="content">
28+
<p>Touch events on this page will log out below, prepending to the top as they arrive.</p>
29+
30+
<ul data-role="listview" id="log">
31+
32+
</ul>
33+
34+
</div>
35+
</div>
36+
</body>
37+
</html>

0 commit comments

Comments
 (0)