1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/bower_components/emby-webcomponents/touchhelper.js

74 lines
4.1 KiB
JavaScript
Raw Normal View History

2018-10-23 01:05:09 +03:00
define(["dom", "events"], function(dom, events) {
"use strict";
function getTouches(e) {
return e.changedTouches || e.targetTouches || e.touches
}
function TouchHelper(elem, options) {
options = options || {};
var touchTarget, touchStartX, touchStartY, lastDeltaX, lastDeltaY, thresholdYMet, self = this,
swipeXThreshold = options.swipeXThreshold || 50,
swipeYThreshold = options.swipeYThreshold || 50,
excludeTagNames = options.ignoreTagNames || [],
touchStart = function(e) {
var touch = getTouches(e)[0];
if (touchTarget = null, touchStartX = 0, touchStartY = 0, lastDeltaX = null, lastDeltaY = null, thresholdYMet = !1, touch) {
var currentTouchTarget = touch.target;
if (dom.parentWithTag(currentTouchTarget, excludeTagNames)) return;
touchTarget = currentTouchTarget, touchStartX = touch.clientX, touchStartY = touch.clientY
}
},
touchEnd = function(e) {
var isTouchMove = "touchmove" === e.type;
if (touchTarget) {
var deltaX, deltaY, clientX, clientY, touch = getTouches(e)[0];
touch ? (clientX = touch.clientX || 0, clientY = touch.clientY || 0, deltaX = clientX - (touchStartX || 0), deltaY = clientY - (touchStartY || 0)) : (deltaX = 0, deltaY = 0);
var currentDeltaX = null == lastDeltaX ? deltaX : deltaX - lastDeltaX,
currentDeltaY = null == lastDeltaY ? deltaY : deltaY - lastDeltaY;
lastDeltaX = deltaX, lastDeltaY = deltaY, deltaX > swipeXThreshold && Math.abs(deltaY) < 30 ? events.trigger(self, "swiperight", [touchTarget]) : deltaX < 0 - swipeXThreshold && Math.abs(deltaY) < 30 ? events.trigger(self, "swipeleft", [touchTarget]) : (deltaY < 0 - swipeYThreshold || thresholdYMet) && Math.abs(deltaX) < 30 ? (thresholdYMet = !0, events.trigger(self, "swipeup", [touchTarget, {
deltaY: deltaY,
deltaX: deltaX,
clientX: clientX,
clientY: clientY,
currentDeltaX: currentDeltaX,
currentDeltaY: currentDeltaY
}])) : (deltaY > swipeYThreshold || thresholdYMet) && Math.abs(deltaX) < 30 && (thresholdYMet = !0, events.trigger(self, "swipedown", [touchTarget, {
deltaY: deltaY,
deltaX: deltaX,
clientX: clientX,
clientY: clientY,
currentDeltaX: currentDeltaX,
currentDeltaY: currentDeltaY
}])), isTouchMove && options.preventDefaultOnMove && e.preventDefault()
}
isTouchMove || (touchTarget = null, touchStartX = 0, touchStartY = 0, lastDeltaX = null, lastDeltaY = null, thresholdYMet = !1)
};
this.touchStart = touchStart, this.touchEnd = touchEnd, dom.addEventListener(elem, "touchstart", touchStart, {
passive: !0
}), options.triggerOnMove && dom.addEventListener(elem, "touchmove", touchEnd, {
passive: !options.preventDefaultOnMove
}), dom.addEventListener(elem, "touchend", touchEnd, {
passive: !0
}), dom.addEventListener(elem, "touchcancel", touchEnd, {
passive: !0
})
}
return TouchHelper.prototype.destroy = function() {
var elem = this.elem;
if (elem) {
var touchStart = this.touchStart,
touchEnd = this.touchEnd;
dom.removeEventListener(elem, "touchstart", touchStart, {
passive: !0
}), dom.removeEventListener(elem, "touchmove", touchEnd, {
passive: !0
}), dom.removeEventListener(elem, "touchend", touchEnd, {
passive: !0
}), dom.removeEventListener(elem, "touchcancel", touchEnd, {
passive: !0
})
}
this.touchStart = null, this.touchEnd = null, this.elem = null
}, TouchHelper
});