From 8d38cacbb2ddbfbc4baa3686b05a29b7c67d2bad Mon Sep 17 00:00:00 2001 From: Hunter Perrin Date: Sun, 3 Dec 2023 13:42:40 -0800 Subject: [PATCH] Add pinch and rotate gestures. --- DemoPannable.js | 16 +-- DemoPinchable.js | 69 +++++++++ DemoRotatable.js | 69 +++++++++ DemoSwipeable.js | 30 +++- DemoTappable.js | 10 +- README.md | 28 +++- dist/TinyGesture.d.ts | 14 ++ dist/TinyGesture.js | 266 ++++++++++++++++++++++------------ dist/TinyGesture.js.map | 2 +- index.html | 20 ++- src/TinyGesture.ts | 309 +++++++++++++++++++++++++++------------- tsconfig.json | 2 +- 12 files changed, 614 insertions(+), 221 deletions(-) create mode 100644 DemoPinchable.js create mode 100644 DemoRotatable.js diff --git a/DemoPannable.js b/DemoPannable.js index b4f4263..02ffa9e 100644 --- a/DemoPannable.js +++ b/DemoPannable.js @@ -27,14 +27,14 @@ export default function Pannable(node) { return; } animationFrame = window.requestAnimationFrame(() => { - // Give an indication of whether we've passed the swiping threshold. - if (!gesture.swipingDirection.startsWith('pre-')) { - node.style.opacity = '0.7'; - } else { - node.style.opacity = '1'; + if (gesture.scale <= 1.1 && gesture.scale >= 0.9) { + // Give an indication of whether we've passed the swiping threshold. + if (!gesture.swipingDirection.startsWith('pre-')) { + node.style.opacity = '0.7'; + } else { + node.style.opacity = '1'; + } } - // Give an indication of how far the user has pulled the target away from its origin. - node.style.transform = 'rotate(' + (gesture.touchMoveX / 8 + gesture.touchMoveY / 8) + 'deg)'; // Update the location to under the user's finger/mouse. node.style.left = gesture.touchMoveX + 'px'; node.style.top = gesture.touchMoveY + 'px'; @@ -45,7 +45,6 @@ export default function Pannable(node) { gesture.on('panend', () => { animationFrame == null || window.cancelAnimationFrame(animationFrame); animationFrame = null; - node.style.transform = ''; // Set left and top transitions so we smoothly animate back to the target's origin. addTransition(node, 'left .3s ease'); addTransition(node, 'top .3s ease'); @@ -61,7 +60,6 @@ export default function Pannable(node) { passive: false, }); animationFrame == null || window.cancelAnimationFrame(animationFrame); - node.style.transform = ''; removeTransition(node, 'opacity'); removeTransition(node, 'left'); removeTransition(node, 'top'); diff --git a/DemoPinchable.js b/DemoPinchable.js new file mode 100644 index 0000000..a6ea942 --- /dev/null +++ b/DemoPinchable.js @@ -0,0 +1,69 @@ +import TinyGesture from './dist/TinyGesture.js'; +import { addTransition, removeTransition } from './DemoTransitions.js'; + +/** + * This function can be used as a Svelte action. + */ +export default function Pinchable(node) { + const gesture = new TinyGesture(node); + let backTimeout; + const preventDefault = (event) => { + event.preventDefault(); + }; + + addTransition(node, 'transform .5s ease'); + addTransition(node, 'transform-origin .5s ease'); + + // Don't allow the page to scroll when the target is first pressed. + node.addEventListener('touchstart', preventDefault, { passive: false }); + + let scale = 1; + let origin = null; + let myTransform = ` scale(${scale})`; + node.style.transform = ''; + + function resetTransform() { + node.style.transform = `${node.style.transform}`.replace(/\s*scale\([^)]*\)/, ''); + myTransform = ` scale(${scale})`; + } + + // When the target is pinched, scale it to the right size. + gesture.on('pinch', () => { + scale = gesture.scale; + if (origin == null) { + const box = node.getBoundingClientRect(); + origin = [gesture.touchMove1.clientX - box.x, gesture.touchMove1.clientY - box.y]; + node.style.transformOrigin = `${origin[0]}px ${origin[1]}px`; + } + resetTransform(); + removeTransition(node, 'transform'); + removeTransition(node, 'transform-origin'); + node.style.transform = `${node.style.transform}` + myTransform; + }); + + // When the target is pinched, scale it to the right size. + gesture.on('pinchend', () => { + scale = gesture.scale; + origin = null; + addTransition(node, 'transform .5s ease'); + addTransition(node, 'transform-origin .5s ease'); + node.style.transformOrigin = 'center'; + clearTimeout(backTimeout); + backTimeout = setTimeout(() => { + scale = 0; + resetTransform(); + }, 1000); + }); + + return { + destroy() { + node.removeEventListener('touchstart', preventDefault, { + passive: false, + }); + clearTimeout(backTimeout); + node.style.transform = ''; + removeTransition(node, 'transform'); + gesture.destroy(); + }, + }; +} diff --git a/DemoRotatable.js b/DemoRotatable.js new file mode 100644 index 0000000..b60c4d4 --- /dev/null +++ b/DemoRotatable.js @@ -0,0 +1,69 @@ +import TinyGesture from './dist/TinyGesture.js'; +import { addTransition, removeTransition } from './DemoTransitions.js'; + +/** + * This function can be used as a Svelte action. + */ +export default function Rotatable(node) { + const gesture = new TinyGesture(node); + let backTimeout; + const preventDefault = (event) => { + event.preventDefault(); + }; + + addTransition(node, 'transform .5s ease'); + addTransition(node, 'transform-origin .5s ease'); + + // Don't allow the page to scroll when the target is first pressed. + node.addEventListener('touchstart', preventDefault, { passive: false }); + + let angle = 0; + let origin = null; + let myTransform = ` rotate(${angle}deg)`; + node.style.transform = ''; + + function resetTransform() { + node.style.transform = `${node.style.transform}`.replace(/\s*rotate\([^)]*\)/, ''); + myTransform = ` rotate(${angle}deg)`; + } + + // When the target is rotated, rotate it to the right angle. + gesture.on('rotate', () => { + angle = gesture.rotation; + if (origin == null) { + const box = node.getBoundingClientRect(); + origin = [gesture.touchMove1.clientX - box.x, gesture.touchMove1.clientY - box.y]; + node.style.transformOrigin = `${origin[0]}px ${origin[1]}px`; + } + resetTransform(); + removeTransition(node, 'transform'); + removeTransition(node, 'transform-origin'); + node.style.transform = `${node.style.transform}` + myTransform; + }); + + // When the target is rotated, rotate it to the right angle. + gesture.on('rotateend', () => { + angle = gesture.angle; + origin = null; + addTransition(node, 'transform .5s ease'); + addTransition(node, 'transform-origin .5s ease'); + node.style.transformOrigin = 'center'; + clearTimeout(backTimeout); + backTimeout = setTimeout(() => { + angle = 0; + resetTransform(); + }, 1000); + }); + + return { + destroy() { + node.removeEventListener('touchstart', preventDefault, { + passive: false, + }); + clearTimeout(backTimeout); + node.style.transform = ''; + removeTransition(node, 'transform'); + gesture.destroy(); + }, + }; +} diff --git a/DemoSwipeable.js b/DemoSwipeable.js index e450c00..fe3ba10 100644 --- a/DemoSwipeable.js +++ b/DemoSwipeable.js @@ -12,42 +12,66 @@ export default function Swipeable(node) { event.preventDefault(); }; - addTransition(node, 'transform .3s ease'); + addTransition(node, 'transform .5s ease'); // Don't allow the page to scroll when the target is first pressed. node.addEventListener('touchstart', preventDefault, { passive: false }); let xpos = 0; let ypos = 0; + let myTransform = ` translateX(${xpos}px) translateY(${ypos}px)`; + node.style.transform = ''; + + function resetTransform() { + node.style.transform = `${node.style.transform}`.replace(/\s*translateX\([^)]*\)/, ''); + node.style.transform = `${node.style.transform}`.replace(/\s*translateY\([^)]*\)/, ''); + myTransform = ` translateX(${xpos}px) translateY(${ypos}px)`; + } function doTransform() { - node.style.transform = `perspective(1000px) translate3d(${xpos}px, ${ypos}px, 0)`; + node.style.transform = `${node.style.transform}` + myTransform; clearTimeout(backTimeout); backTimeout = setTimeout(() => { xpos = 0; ypos = 0; - node.style.transform = ''; + resetTransform(); }, 1000); } // When the target is swiped, fling it really far in that direction before coming back to origin. gesture.on('swiperight', () => { + if (gesture.scale > 1.1 || gesture.scale < 0.9) { + return; + } xpos = 2000; + resetTransform(); cancelAnimationFrame(goRaf); goRaf = requestAnimationFrame(doTransform); }); gesture.on('swipeleft', () => { + if (gesture.scale > 1.1 || gesture.scale < 0.9) { + return; + } xpos = -2000; + resetTransform(); cancelAnimationFrame(goRaf); goRaf = requestAnimationFrame(doTransform); }); gesture.on('swipeup', () => { + if (gesture.scale > 1.1 || gesture.scale < 0.9) { + return; + } ypos = -2000; + resetTransform(); cancelAnimationFrame(goRaf); goRaf = requestAnimationFrame(doTransform); }); gesture.on('swipedown', () => { + if (gesture.scale > 1.1 || gesture.scale < 0.9) { + return; + } ypos = 2000; + resetTransform(); cancelAnimationFrame(goRaf); goRaf = requestAnimationFrame(doTransform); }); diff --git a/DemoTappable.js b/DemoTappable.js index 6a4bf94..3ffd8c4 100644 --- a/DemoTappable.js +++ b/DemoTappable.js @@ -9,7 +9,7 @@ export default function Tappable( options = { bgColor: 'transparent', color: 'black', - } + }, ) { const gesture = new TinyGesture(node); let tapTimeout; @@ -22,8 +22,8 @@ export default function Tappable( // Note: don't use the 'tap' event to detect when the user has finished a long press, because it doesn't always fire. gesture.on('tap', () => { - // If the user long pressed, don't run the tap handler. This event fires after the user lifts their finger. - if (pressed) { + // If the user long pressed or pinched, don't run the tap handler. This event fires after the user lifts their finger. + if (pressed || gesture.scale > 1.1 || gesture.scale < 0.9) { return; } // Embiggen. @@ -40,6 +40,10 @@ export default function Tappable( gesture.on('longpress', () => { // Indicate that this is a long press. This event fires before the user lifts their finger. pressed = true; + // If the user pinched, don't run the handler. + if (gesture.scale > 1.1 || gesture.scale < 0.9) { + return; + } // Change colors. node.style.backgroundColor = options.bgColor; node.style.color = options.color; diff --git a/README.md b/README.md index bce703b..efe8a9a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # TinyGesture.js -Very small gesture recognizer for JavaScript. Swipe, pan, tap, doubletap, and longpress. +Very small gesture recognizer for JavaScript. Swipe, pan, tap, doubletap, longpress, pinch, and rotate. ## Installation @@ -8,7 +8,8 @@ Very small gesture recognizer for JavaScript. Swipe, pan, tap, doubletap, and lo npm install --save tinygesture ``` -If you're upgrading from 1.0, the only breaking change in 2.0 is the location of the file. It's now in a "dist" folder, hence the major version change. +- If you're upgrading from v2, the `diagonalLimit` option has changed meaning and there are new events for pinch and rotate. Also TS now exports ES2020 instead of ES6. +- If you're upgrading from v1, the location of the file has changed. It's now in a "dist" folder, hence the major version change. ## Usage @@ -158,6 +159,29 @@ gesture.on('doubletap', (event) => { gesture.on('longpress', (event) => { // The gesture is currently ongoing, and is now a long press. }); + +gesture.on('pinch', (event) => { + // The gesture is an ongoing pinch. + + // This is the current scale of the pinch. <1 means the user is zooming out. + // >1 means the user is zooming in. + gesture.scale; +}); + +gesture.on('pinchend', (event) => { + // The pinch gesture is completed. +}); + +gesture.on('rotate', (event) => { + // The gesture is an ongoing rotate. + + // This is the current angle of the rotation, in degrees. + gesture.rotation; +}); + +gesture.on('rotateend', (event) => { + // The rotate gesture is completed. +}); ``` ### Long Press without Tap diff --git a/dist/TinyGesture.d.ts b/dist/TinyGesture.d.ts index 4b9123b..cb172f1 100644 --- a/dist/TinyGesture.d.ts +++ b/dist/TinyGesture.d.ts @@ -1,10 +1,14 @@ export default class TinyGesture { element: Element; opts: Options; + touch1: Touch | null; + touch2: Touch | null; touchStartX: number | null; touchStartY: number | null; touchEndX: number | null; touchEndY: number | null; + touchMove1: Touch | null; + touchMove2: Touch | null; touchMoveX: number | null; touchMoveY: number | null; velocityX: number | null; @@ -21,6 +25,12 @@ export default class TinyGesture { swipingDirection: SwipingDirection | null; swipedHorizontal: boolean; swipedVertical: boolean; + originalDistance: number | null; + newDistance: number | null; + scale: number | null; + originalAngle: number | null; + newAngle: number | null; + rotation: number | null; handlers: Handlers; private _onTouchStart; private _onTouchMove; @@ -61,6 +71,10 @@ export interface Events { swiperight: MouseEvent | TouchEvent; swipeup: MouseEvent | TouchEvent; tap: MouseEvent | TouchEvent; + pinch: TouchEvent; + pinchend: TouchEvent; + rotate: TouchEvent; + rotateend: TouchEvent; } export type Handler = (event: E) => void; export type Handlers = { diff --git a/dist/TinyGesture.js b/dist/TinyGesture.js index b691917..4d26f95 100644 --- a/dist/TinyGesture.js +++ b/dist/TinyGesture.js @@ -1,10 +1,14 @@ class TinyGesture { constructor(element, options) { this.element = element; + this.touch1 = null; + this.touch2 = null; this.touchStartX = null; this.touchStartY = null; this.touchEndX = null; this.touchEndY = null; + this.touchMove1 = null; + this.touchMove2 = null; this.touchMoveX = null; this.touchMoveY = null; this.velocityX = null; @@ -21,6 +25,12 @@ class TinyGesture { this.swipingDirection = null; this.swipedHorizontal = false; this.swipedVertical = false; + this.originalDistance = null; + this.newDistance = null; + this.scale = null; + this.originalAngle = null; + this.newAngle = null; + this.rotation = null; this.handlers = { panstart: [], panmove: [], @@ -32,6 +42,10 @@ class TinyGesture { tap: [], doubletap: [], longpress: [], + pinch: [], + pinchend: [], + rotate: [], + rotateend: [], }; this._onTouchStart = this.onTouchStart.bind(this); this._onTouchMove = this.onTouchMove.bind(this); @@ -81,121 +95,187 @@ class TinyGesture { } } onTouchStart(event) { - this.thresholdX = this.opts.threshold('x', this); - this.thresholdY = this.opts.threshold('y', this); - this.disregardVelocityThresholdX = this.opts.disregardVelocityThreshold('x', this); - this.disregardVelocityThresholdY = this.opts.disregardVelocityThreshold('y', this); - this.touchStartX = - event.type === 'mousedown' ? event.screenX : event.changedTouches[0].screenX; - this.touchStartY = - event.type === 'mousedown' ? event.screenY : event.changedTouches[0].screenY; - this.touchMoveX = null; - this.touchMoveY = null; - this.touchEndX = null; - this.touchEndY = null; - this.swipingDirection = null; - this.longPressTimer = setTimeout(() => this.fire('longpress', event), this.opts.longPressTime); - this.fire('panstart', event); + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1; + let didTouch1 = false; + let didTouch2 = false; + if (event.type !== 'mousedown') { + if (!this.touch1) { + this.touch1 = event.changedTouches[0]; + didTouch1 = true; + } + if (((didTouch1 && event.changedTouches.length > 1) || !didTouch1) && !this.touch2) { + this.touch2 = + [...event.changedTouches].find((touch) => { var _a; return touch.identifier !== ((_a = this.touch1) === null || _a === void 0 ? void 0 : _a.identifier); }) || + null; + this.originalDistance = Math.sqrt(Math.pow(((_b = (_a = this.touch2) === null || _a === void 0 ? void 0 : _a.screenX) !== null && _b !== void 0 ? _b : 0) - ((_f = (_d = (_c = this.touchMove1) === null || _c === void 0 ? void 0 : _c.screenX) !== null && _d !== void 0 ? _d : (_e = this.touch1) === null || _e === void 0 ? void 0 : _e.screenX) !== null && _f !== void 0 ? _f : 0), 2) + + Math.pow(((_h = (_g = this.touch2) === null || _g === void 0 ? void 0 : _g.screenY) !== null && _h !== void 0 ? _h : 0) - ((_m = (_k = (_j = this.touchMove1) === null || _j === void 0 ? void 0 : _j.screenY) !== null && _k !== void 0 ? _k : (_l = this.touch1) === null || _l === void 0 ? void 0 : _l.screenY) !== null && _m !== void 0 ? _m : 0), 2)); + this.originalAngle = + Math.atan2(((_p = (_o = this.touch2) === null || _o === void 0 ? void 0 : _o.screenY) !== null && _p !== void 0 ? _p : 0) - ((_t = (_r = (_q = this.touchMove1) === null || _q === void 0 ? void 0 : _q.screenY) !== null && _r !== void 0 ? _r : (_s = this.touch1) === null || _s === void 0 ? void 0 : _s.screenY) !== null && _t !== void 0 ? _t : 0), ((_v = (_u = this.touch2) === null || _u === void 0 ? void 0 : _u.screenX) !== null && _v !== void 0 ? _v : 0) - ((_z = (_x = (_w = this.touchMove1) === null || _w === void 0 ? void 0 : _w.screenX) !== null && _x !== void 0 ? _x : (_y = this.touch1) === null || _y === void 0 ? void 0 : _y.screenX) !== null && _z !== void 0 ? _z : 0)) / + (Math.PI / 180); + return; + } + if (!didTouch1 && !didTouch2) { + return; + } + } + if (didTouch1 || event.type === 'mousedown') { + this.thresholdX = this.opts.threshold('x', this); + this.thresholdY = this.opts.threshold('y', this); + this.disregardVelocityThresholdX = this.opts.disregardVelocityThreshold('x', this); + this.disregardVelocityThresholdY = this.opts.disregardVelocityThreshold('y', this); + this.touchStartX = event.type === 'mousedown' ? event.screenX : ((_0 = this.touch1) === null || _0 === void 0 ? void 0 : _0.screenX) || 0; + this.touchStartY = event.type === 'mousedown' ? event.screenY : ((_1 = this.touch1) === null || _1 === void 0 ? void 0 : _1.screenY) || 0; + this.touchMoveX = null; + this.touchMoveY = null; + this.touchEndX = null; + this.touchEndY = null; + this.swipingDirection = null; + this.longPressTimer = setTimeout(() => this.fire('longpress', event), this.opts.longPressTime); + this.scale = 1; + this.rotation = 0; + this.fire('panstart', event); + } } onTouchMove(event) { - var _a, _b, _c, _d, _e; + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; if (event.type === 'mousemove' && (!this.touchStartX || this.touchEndX !== null)) { return; } - const touchMoveX = (event.type === 'mousemove' ? event.screenX : event.changedTouches[0].screenX) - - ((_a = this.touchStartX) !== null && _a !== void 0 ? _a : 0); - this.velocityX = touchMoveX - ((_b = this.touchMoveX) !== null && _b !== void 0 ? _b : 0); - this.touchMoveX = touchMoveX; - const touchMoveY = (event.type === 'mousemove' ? event.screenY : event.changedTouches[0].screenY) - - ((_c = this.touchStartY) !== null && _c !== void 0 ? _c : 0); - this.velocityY = touchMoveY - ((_d = this.touchMoveY) !== null && _d !== void 0 ? _d : 0); - this.touchMoveY = touchMoveY; - const absTouchMoveX = Math.abs(this.touchMoveX); - const absTouchMoveY = Math.abs(this.touchMoveY); - this.swipingHorizontal = absTouchMoveX > this.thresholdX; - this.swipingVertical = absTouchMoveY > this.thresholdY; - this.swipingDirection = - absTouchMoveX > absTouchMoveY - ? this.swipingHorizontal - ? 'horizontal' - : 'pre-horizontal' - : this.swipingVertical - ? 'vertical' - : 'pre-vertical'; - if (Math.max(absTouchMoveX, absTouchMoveY) > this.opts.pressThreshold) { - clearTimeout((_e = this.longPressTimer) !== null && _e !== void 0 ? _e : undefined); + let touch1 = undefined; + let touch2 = undefined; + if (event.type !== 'mousemove') { + touch1 = [...event.changedTouches].find((touch) => { var _a; return touch.identifier === ((_a = this.touch1) === null || _a === void 0 ? void 0 : _a.identifier); }); + this.touchMove1 = touch1 || this.touchMove1; + touch2 = [...event.changedTouches].find((touch) => { var _a; return touch.identifier === ((_a = this.touch2) === null || _a === void 0 ? void 0 : _a.identifier); }); + this.touchMove2 = touch2 || this.touchMove2; + } + if (event.type === 'mousemove' || touch1) { + const touchMoveX = (event.type === 'mousemove' ? event.screenX : (_a = touch1 === null || touch1 === void 0 ? void 0 : touch1.screenX) !== null && _a !== void 0 ? _a : 0) - ((_b = this.touchStartX) !== null && _b !== void 0 ? _b : 0); + this.velocityX = touchMoveX - ((_c = this.touchMoveX) !== null && _c !== void 0 ? _c : 0); + this.touchMoveX = touchMoveX; + const touchMoveY = (event.type === 'mousemove' ? event.screenY : (_d = touch1 === null || touch1 === void 0 ? void 0 : touch1.screenY) !== null && _d !== void 0 ? _d : 0) - ((_e = this.touchStartY) !== null && _e !== void 0 ? _e : 0); + this.velocityY = touchMoveY - ((_f = this.touchMoveY) !== null && _f !== void 0 ? _f : 0); + this.touchMoveY = touchMoveY; + const absTouchMoveX = Math.abs(this.touchMoveX); + const absTouchMoveY = Math.abs(this.touchMoveY); + this.swipingHorizontal = absTouchMoveX > this.thresholdX; + this.swipingVertical = absTouchMoveY > this.thresholdY; + this.swipingDirection = + absTouchMoveX > absTouchMoveY + ? this.swipingHorizontal + ? 'horizontal' + : 'pre-horizontal' + : this.swipingVertical + ? 'vertical' + : 'pre-vertical'; + if (Math.max(absTouchMoveX, absTouchMoveY) > this.opts.pressThreshold) { + clearTimeout((_g = this.longPressTimer) !== null && _g !== void 0 ? _g : undefined); + } + this.fire('panmove', event); + } + if (event.type !== 'mousemove' && this.touchMove1 != null && this.touchMove2 != null) { + this.newDistance = Math.sqrt(Math.pow(this.touchMove2.screenX - this.touchMove1.screenX, 2) + + Math.pow(this.touchMove2.screenY - this.touchMove1.screenY, 2)); + this.scale = this.newDistance / ((_h = this.originalDistance) !== null && _h !== void 0 ? _h : 0); + this.fire('pinch', event); + this.newAngle = + Math.atan2(((_j = this.touchMove2.screenY) !== null && _j !== void 0 ? _j : 0) - ((_k = this.touchMove1.screenY) !== null && _k !== void 0 ? _k : 0), ((_l = this.touchMove2.screenX) !== null && _l !== void 0 ? _l : 0) - ((_m = this.touchMove1.screenX) !== null && _m !== void 0 ? _m : 0)) / + (Math.PI / 180); + this.rotation = this.newAngle - ((_o = this.originalAngle) !== null && _o !== void 0 ? _o : 0); + this.fire('rotate', event); } - this.fire('panmove', event); } onTouchEnd(event) { - var _a, _b, _c, _d, _e, _f, _g, _h; + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; + let touch1 = undefined; + if (event.type !== 'mouseup') { + touch1 = [...event.changedTouches].find((touch) => { var _a; return touch.identifier === ((_a = this.touch1) === null || _a === void 0 ? void 0 : _a.identifier); }); + if (![...event.touches].find((touch) => { var _a; return touch.identifier === ((_a = this.touch1) === null || _a === void 0 ? void 0 : _a.identifier); })) { + this.touch1 = null; + this.touchMove1 = null; + } + if (![...event.touches].find((touch) => { var _a; return touch.identifier === ((_a = this.touch2) === null || _a === void 0 ? void 0 : _a.identifier); })) { + this.touch2 = null; + this.touchMove2 = null; + } + } if (event.type === 'mouseup' && (!this.touchStartX || this.touchEndX !== null)) { return; } - this.touchEndX = - event.type === 'mouseup' ? event.screenX : event.changedTouches[0].screenX; - this.touchEndY = - event.type === 'mouseup' ? event.screenY : event.changedTouches[0].screenY; - this.fire('panend', event); - clearTimeout((_a = this.longPressTimer) !== null && _a !== void 0 ? _a : undefined); - const x = this.touchEndX - ((_b = this.touchStartX) !== null && _b !== void 0 ? _b : 0); - const absX = Math.abs(x); - const y = this.touchEndY - ((_c = this.touchStartY) !== null && _c !== void 0 ? _c : 0); - const absY = Math.abs(y); - const distance = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); - const absDistance = Math.abs(distance); - const diagonal = absY / absX; - if (absX > this.thresholdX || - absY > this.thresholdY || - (this.opts.diagonalSwipes && (absDistance > this.thresholdX || absDistance > this.thresholdY))) { - this.swipedHorizontal = absX > this.thresholdX || (this.opts.diagonalSwipes && absDistance > this.thresholdX); - this.swipedVertical = absY > this.thresholdY || (this.opts.diagonalSwipes && absDistance > this.thresholdY); - if (!this.opts.diagonalSwipes || - diagonal < Math.tan(((45 - this.opts.diagonalLimit) * Math.PI) / 180) || - diagonal > Math.tan(((45 + this.opts.diagonalLimit) * Math.PI) / 180)) { - if (absX >= absY) { - this.swipedVertical = false; - } - if (absY > absX) { - this.swipedHorizontal = false; + if (event.type === 'mouseup' || touch1) { + this.touchEndX = event.type === 'mouseup' ? event.screenX : (_a = touch1 === null || touch1 === void 0 ? void 0 : touch1.screenX) !== null && _a !== void 0 ? _a : 0; + this.touchEndY = event.type === 'mouseup' ? event.screenY : (_b = touch1 === null || touch1 === void 0 ? void 0 : touch1.screenY) !== null && _b !== void 0 ? _b : 0; + this.fire('panend', event); + clearTimeout((_c = this.longPressTimer) !== null && _c !== void 0 ? _c : undefined); + const x = this.touchEndX - ((_d = this.touchStartX) !== null && _d !== void 0 ? _d : 0); + const absX = Math.abs(x); + const y = this.touchEndY - ((_e = this.touchStartY) !== null && _e !== void 0 ? _e : 0); + const absY = Math.abs(y); + const distance = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); + const absDistance = Math.abs(distance); + const diagonal = absY / absX; + if (absX > this.thresholdX || + absY > this.thresholdY || + (this.opts.diagonalSwipes && (absDistance > this.thresholdX || absDistance > this.thresholdY))) { + this.swipedHorizontal = absX > this.thresholdX || (this.opts.diagonalSwipes && absDistance > this.thresholdX); + this.swipedVertical = absY > this.thresholdY || (this.opts.diagonalSwipes && absDistance > this.thresholdY); + if (!this.opts.diagonalSwipes || + diagonal < Math.tan(((45 - this.opts.diagonalLimit) * Math.PI) / 180) || + diagonal > Math.tan(((45 + this.opts.diagonalLimit) * Math.PI) / 180)) { + if (absX >= absY) { + this.swipedVertical = false; + } + if (absY > absX) { + this.swipedHorizontal = false; + } } - } - if (this.swipedHorizontal) { - if (x < 0) { - if (((_d = this.velocityX) !== null && _d !== void 0 ? _d : 0) < -this.opts.velocityThreshold || distance < -this.disregardVelocityThresholdX) { - this.fire('swipeleft', event); + if (this.swipedHorizontal) { + if (x < 0) { + if (((_f = this.velocityX) !== null && _f !== void 0 ? _f : 0) < -this.opts.velocityThreshold || distance < -this.disregardVelocityThresholdX) { + this.fire('swipeleft', event); + } + } + else { + if (((_g = this.velocityX) !== null && _g !== void 0 ? _g : 0) > this.opts.velocityThreshold || distance > this.disregardVelocityThresholdX) { + this.fire('swiperight', event); + } } } - else { - if (((_e = this.velocityX) !== null && _e !== void 0 ? _e : 0) > this.opts.velocityThreshold || distance > this.disregardVelocityThresholdX) { - this.fire('swiperight', event); + if (this.swipedVertical) { + if (y < 0) { + if (((_h = this.velocityY) !== null && _h !== void 0 ? _h : 0) < -this.opts.velocityThreshold || distance < -this.disregardVelocityThresholdY) { + this.fire('swipeup', event); + } + } + else { + if (((_j = this.velocityY) !== null && _j !== void 0 ? _j : 0) > this.opts.velocityThreshold || distance > this.disregardVelocityThresholdY) { + this.fire('swipedown', event); + } } } } - if (this.swipedVertical) { - if (y < 0) { - if (((_f = this.velocityY) !== null && _f !== void 0 ? _f : 0) < -this.opts.velocityThreshold || distance < -this.disregardVelocityThresholdY) { - this.fire('swipeup', event); - } + else if (absX < this.opts.pressThreshold && absY < this.opts.pressThreshold) { + if (this.doubleTapWaiting) { + this.doubleTapWaiting = false; + clearTimeout((_k = this.doubleTapTimer) !== null && _k !== void 0 ? _k : undefined); + this.fire('doubletap', event); } else { - if (((_g = this.velocityY) !== null && _g !== void 0 ? _g : 0) > this.opts.velocityThreshold || distance > this.disregardVelocityThresholdY) { - this.fire('swipedown', event); - } + this.doubleTapWaiting = true; + this.doubleTapTimer = setTimeout(() => (this.doubleTapWaiting = false), this.opts.doubleTapTime); + this.fire('tap', event); } } } - else if (absX < this.opts.pressThreshold && absY < this.opts.pressThreshold) { - if (this.doubleTapWaiting) { - this.doubleTapWaiting = false; - clearTimeout((_h = this.doubleTapTimer) !== null && _h !== void 0 ? _h : undefined); - this.fire('doubletap', event); - } - else { - this.doubleTapWaiting = true; - this.doubleTapTimer = setTimeout(() => (this.doubleTapWaiting = false), this.opts.doubleTapTime); - this.fire('tap', event); - } + if (!this.touch1 && !this.touch2) { + this.fire('pinchend', event); + this.fire('rotateend', event); + this.originalDistance = null; + this.newDistance = null; + this.scale = null; + this.originalAngle = null; + this.newAngle = null; + this.rotation = null; } } } diff --git a/dist/TinyGesture.js.map b/dist/TinyGesture.js.map index c4ad367..1326969 100644 --- a/dist/TinyGesture.js.map +++ b/dist/TinyGesture.js.map @@ -1 +1 @@ -{"version":3,"file":"TinyGesture.js","sourceRoot":"","sources":["../src/TinyGesture.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"TinyGesture.js","sourceRoot":"","sources":["../src/TinyGesture.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/index.html b/index.html index 6fc6ae0..abbbea9 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ @@ -14,6 +14,8 @@ import Pannable from './DemoPannable.js'; import Swipeable from './DemoSwipeable.js'; import Tappable from './DemoTappable.js'; + import Pinchable from './DemoPinchable.js'; + import Rotatable from './DemoRotatable.js'; document.addEventListener('DOMContentLoaded', () => { const target = document.getElementById('target'); @@ -24,6 +26,8 @@ bgColor: '#666688', color: '#fff', }); + Pinchable(target); + Rotatable(target); }); @@ -33,7 +37,7 @@ @@ -47,23 +51,23 @@