diff --git a/src/standard/gestures.html b/src/standard/gestures.html index 799dfa0f5b..a592f76159 100644 --- a/src/standard/gestures.html +++ b/src/standard/gestures.html @@ -391,10 +391,9 @@ // forward `preventDefault` in a clean way if (ev.defaultPrevented) { - var se = detail.sourceEvent; - // sourceEvent may be a touch, which is not preventable this way - if (se && se.preventDefault) { - se.preventDefault(); + var preventer = detail.preventer || detail.sourceEvent; + if (preventer && preventer.preventDefault) { + preventer.preventDefault(); } } }, @@ -461,16 +460,17 @@ this.fire('down', t, e); }, touchstart: function(e) { - this.fire('down', Gestures.findOriginalTarget(e), e.changedTouches[0]); + this.fire('down', Gestures.findOriginalTarget(e), e.changedTouches[0], e); }, touchend: function(e) { - this.fire('up', Gestures.findOriginalTarget(e), e.changedTouches[0]); + this.fire('up', Gestures.findOriginalTarget(e), e.changedTouches[0], e); }, - fire: function(type, target, event) { + fire: function(type, target, event, preventer) { Gestures.fire(target, type, { x: event.clientX, y: event.clientY, sourceEvent: event, + preventer: preventer, prevent: function(e) { return Gestures.prevent(e); } @@ -596,11 +596,11 @@ // reset started state on up this.info.state = 'end'; this.info.addMove({x: ct.clientX, y: ct.clientY}); - this.fire(t, ct); + this.fire(t, ct, e); } }, - fire: function(target, touch) { + fire: function(target, touch, preventer) { var secondlast = this.info.moves[this.info.moves.length - 2]; var lastmove = this.info.moves[this.info.moves.length - 1]; var dx = lastmove.x - this.info.x; @@ -619,6 +619,7 @@ ddx: ddx, ddy: ddy, sourceEvent: touch, + preventer: preventer, hover: function() { return Gestures.deepTargetFind(touch.clientX, touch.clientY); } @@ -662,13 +663,13 @@ }, touchstart: function(e) { - this.save(e.changedTouches[0]); + this.save(e.changedTouches[0], e); }, touchend: function(e) { - this.forward(e.changedTouches[0]); + this.forward(e.changedTouches[0], e); }, - forward: function(e) { + forward: function(e, preventer) { var dx = Math.abs(e.clientX - this.info.x); var dy = Math.abs(e.clientY - this.info.y); var t = Gestures.findOriginalTarget(e); @@ -679,7 +680,8 @@ Gestures.fire(t, 'tap', { x: e.clientX, y: e.clientY, - sourceEvent: e + sourceEvent: e, + preventer: preventer }); } }