-
Notifications
You must be signed in to change notification settings - Fork 300
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #56 from archriss/dev
v2.1.5
- Loading branch information
Showing
14 changed files
with
900 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
*.js | ||
*.md |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
'use strict'; | ||
|
||
export function distance (touchTrackA, touchTrackB, ofCurrent) { | ||
let xa, ya, xb, yb; | ||
if (ofCurrent) { | ||
xa = touchTrackA.currentPageX; | ||
ya = touchTrackA.currentPageY; | ||
xb = touchTrackB.currentPageX; | ||
yb = touchTrackB.currentPageY; | ||
} else { | ||
xa = touchTrackA.previousPageX; | ||
ya = touchTrackA.previousPageY; | ||
xb = touchTrackB.previousPageX; | ||
yb = touchTrackB.previousPageY; | ||
} | ||
return Math.sqrt(Math.pow(xa - xb, 2) + Math.pow(ya - yb, 2)); | ||
} | ||
|
||
export function maxDistance (touchBank, ofCurrent) { | ||
let max = 0; | ||
for (let i = 0; i < touchBank.length - 1; i++) { | ||
for (let j = i + 1; j < touchBank.length; j++) { | ||
let d = distance(touchBank[i], touchBank[j], ofCurrent); | ||
if (d > max) { | ||
max = d; | ||
} | ||
} | ||
} | ||
return max; | ||
} | ||
|
||
export function pinchDistance (touchHistory, touchesChangedAfter, ofCurrent) { | ||
let touchBank = touchHistory.touchBank; | ||
if (touchHistory.numberActiveTouches > 1) { | ||
let filteredTouchBank = touchBank.filter((touchTrack) => { | ||
return touchTrack && touchTrack.currentTimeStamp >= touchesChangedAfter; | ||
}); | ||
return maxDistance(filteredTouchBank, ofCurrent); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
/** | ||
* @providesModule TouchHistoryMath | ||
*/ | ||
|
||
'use strict'; | ||
|
||
var TouchHistoryMath = { | ||
/** | ||
* This code is optimized and not intended to look beautiful. This allows | ||
* computing of touch centroids that have moved after `touchesChangedAfter` | ||
* timeStamp. You can compute the current centroid involving all touches | ||
* moves after `touchesChangedAfter`, or you can compute the previous | ||
* centroid of all touches that were moved after `touchesChangedAfter`. | ||
* | ||
* @param {TouchHistoryMath} touchHistory Standard Responder touch track | ||
* data. | ||
* @param {number} touchesChangedAfter timeStamp after which moved touches | ||
* are considered "actively moving" - not just "active". | ||
* @param {boolean} isXAxis Consider `x` dimension vs. `y` dimension. | ||
* @param {boolean} ofCurrent Compute current centroid for actively moving | ||
* touches vs. previous centroid of now actively moving touches. | ||
* @return {number} value of centroid in specified dimension. | ||
*/ | ||
centroidDimension: function (touchHistory, touchesChangedAfter, isXAxis, ofCurrent) { | ||
var touchBank = touchHistory.touchBank; | ||
var total = 0; | ||
var count = 0; | ||
|
||
var oneTouchData = touchHistory.numberActiveTouches === 1 ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch] : null; | ||
|
||
if (oneTouchData !== null) { | ||
if (oneTouchData.touchActive && oneTouchData.currentTimeStamp > touchesChangedAfter) { | ||
total += ofCurrent && isXAxis ? oneTouchData.currentPageX : ofCurrent && !isXAxis ? oneTouchData.currentPageY : !ofCurrent && isXAxis ? oneTouchData.previousPageX : oneTouchData.previousPageY; | ||
count = 1; | ||
} | ||
} else { | ||
for (var i = 0; i < touchBank.length; i++) { | ||
var touchTrack = touchBank[i]; | ||
if (touchTrack !== null && touchTrack !== undefined && touchTrack.touchActive && touchTrack.currentTimeStamp >= touchesChangedAfter) { | ||
var toAdd; // Yuck, program temporarily in invalid state. | ||
if (ofCurrent && isXAxis) { | ||
toAdd = touchTrack.currentPageX; | ||
} else if (ofCurrent && !isXAxis) { | ||
toAdd = touchTrack.currentPageY; | ||
} else if (!ofCurrent && isXAxis) { | ||
toAdd = touchTrack.previousPageX; | ||
} else { | ||
toAdd = touchTrack.previousPageY; | ||
} | ||
total += toAdd; | ||
count++; | ||
} | ||
} | ||
} | ||
return count > 0 ? total / count : TouchHistoryMath.noCentroid; | ||
}, | ||
|
||
currentCentroidXOfTouchesChangedAfter: function (touchHistory, touchesChangedAfter) { | ||
return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true, // isXAxis | ||
true // ofCurrent | ||
); | ||
}, | ||
|
||
currentCentroidYOfTouchesChangedAfter: function (touchHistory, touchesChangedAfter) { | ||
return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false, // isXAxis | ||
true // ofCurrent | ||
); | ||
}, | ||
|
||
previousCentroidXOfTouchesChangedAfter: function (touchHistory, touchesChangedAfter) { | ||
return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true, // isXAxis | ||
false // ofCurrent | ||
); | ||
}, | ||
|
||
previousCentroidYOfTouchesChangedAfter: function (touchHistory, touchesChangedAfter) { | ||
return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false, // isXAxis | ||
false // ofCurrent | ||
); | ||
}, | ||
|
||
currentCentroidX: function (touchHistory) { | ||
return TouchHistoryMath.centroidDimension(touchHistory, 0, // touchesChangedAfter | ||
true, // isXAxis | ||
true // ofCurrent | ||
); | ||
}, | ||
|
||
currentCentroidY: function (touchHistory) { | ||
return TouchHistoryMath.centroidDimension(touchHistory, 0, // touchesChangedAfter | ||
false, // isXAxis | ||
true // ofCurrent | ||
); | ||
}, | ||
|
||
noCentroid: -1 | ||
}; | ||
|
||
module.exports = TouchHistoryMath; |
Oops, something went wrong.