Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

fix(ngTouch): ngClick directive does not use correct event with jQuery #4583

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 17 additions & 11 deletions src/ngTouch/directive/ngClick.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,23 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
return false; // No allowable region; bust it.
}

function getTouches(event) {
event = event.originalEvent || event;
return event.changedTouches && event.changedTouches.length
? event.changedTouches
: event.touches && event.touches.length
? event.touches
: [event];
}

// Global click handler that prevents the click if it's in a bustable zone and preventGhostClick
// was called recently.
function onClick(event) {
if (Date.now() - lastPreventedTime > PREVENT_DURATION) {
return; // Too old.
}

var touches = event.touches && event.touches.length ? event.touches : [event];
var touches = getTouches(event);
var x = touches[0].clientX;
var y = touches[0].clientY;
// Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label
Expand Down Expand Up @@ -146,7 +155,7 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
// Global touchstart handler that creates an allowable region for a click event.
// This allowable region can be removed by preventGhostClick if we want to bust it.
function onTouchStart(event) {
var touches = event.touches && event.touches.length ? event.touches : [event];
var touches = getTouches(event);
var x = touches[0].clientX;
var y = touches[0].clientY;
touchCoordinates.push(x, y);
Expand Down Expand Up @@ -202,10 +211,9 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',

startTime = Date.now();

var touches = event.touches && event.touches.length ? event.touches : [event];
var e = touches[0].originalEvent || touches[0];
touchStartX = e.clientX;
touchStartY = e.clientY;
var touches = getTouches(event);
touchStartX = touches[0].clientX;
touchStartY = touches[0].clientY;
});

element.on('touchmove', function(event) {
Expand All @@ -219,11 +227,9 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
element.on('touchend', function(event) {
var diff = Date.now() - startTime;

var touches = (event.changedTouches && event.changedTouches.length) ? event.changedTouches :
((event.touches && event.touches.length) ? event.touches : [event]);
var e = touches[0].originalEvent || touches[0];
var x = e.clientX;
var y = e.clientY;
var touches = getTouches(event);
var x = touches[0].clientX;
var y = touches[0].clientY;
var dist = Math.sqrt( Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2) );

if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {
Expand Down
15 changes: 10 additions & 5 deletions src/ngTouch/swipe.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,17 @@ ngTouch.factory('$swipe', [function() {
// The total distance in any direction before we make the call on swipe vs. scroll.
var MOVE_BUFFER_RADIUS = 10;

function getTouches(event) {
event = event.originalEvent || event;
return event.changedTouches && event.changedTouches.length
? event.changedTouches
: event.touches && event.touches.length
? event.touches
: [event];
}

function getCoordinates(event) {
var touches = event.touches && event.touches.length ? event.touches : [event];
var e = (event.changedTouches && event.changedTouches[0]) ||
(event.originalEvent && event.originalEvent.changedTouches &&
event.originalEvent.changedTouches[0]) ||
touches[0].originalEvent || touches[0];
var e = getTouches(event)[0];

return {
x: e.clientX,
Expand Down