pqgrid
Version:
<p align="center"> <a href="https://paramquery.com/"> <img src="https://paramquery.com/content/images/pqgrid.png" alt="ParamQuery logo" width="168" height="64"> </a> </p>
74 lines (70 loc) • 2.73 kB
JavaScript
/*!
* ParamQuery Touch v1.0.1
*
* Copyright (c) 2012-2021 Paramvir Dhindsa (http://paramquery.com)
* Released under MIT license
*
*/
if (typeof require == "function") {
var jQuery = require("jquery-ui-pack")
} else {
var jQuery = window.jQuery
}(function($) {
if (!("ontouchstart" in window)) return;
function fireMouseEvent(type, touch, target, relatedTarget) {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent(type, true, true, window, 0, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, relatedTarget);
target.dispatchEvent(evt);
return evt
}
function touchStart(evt) {
if (evt.touches.length == 1) {
var touch = evt.changedTouches[0],
evtM, target = evt.target;
fireMouseEvent("mouseover", touch, target);
fireMouseEvent("mousemove", touch, target);
evtM = fireMouseEvent("mousedown", touch, target);
if (evtM.defaultPrevented) {
target.addEventListener("touchmove", touchMove);
target.addEventListener("touchend", touchEnd)
}
}
}
function touchMove(evt) {
var touch = evt.changedTouches[0],
target = document.elementFromPoint(touch.clientX, touch.clientY);
if (target) {
if (prevTarget) {
if (target && prevTarget !== target) {
fireMouseEvent("mouseover", touch, target, prevTarget);
fireMouseEvent("mouseout", touch, prevTarget, target);
prevTarget = target
}
} else {
prevTarget = target
}
evt.preventDefault();
fireMouseEvent("mousemove", touch, target)
}
}
function touchEnd(evt) {
var touch = evt.changedTouches[0],
target = document.elementFromPoint(touch.clientX, touch.clientY),
targetOrig = evt.target;
fireMouseEvent("mouseup", touch, target);
fireMouseEvent("mouseout", touch, target);
targetOrig.removeEventListener("touchmove", touchMove);
targetOrig.removeEventListener("touchend", touchEnd)
}
var prevTarget, proto = $.ui.mouse.prototype,
mouseInit = proto._mouseInit,
mouseDestroy = proto._mouseDestroy;
proto._mouseInit = function() {
this.element[0].addEventListener("touchstart", touchStart);
mouseInit.apply(this, arguments)
};
proto._mouseDestroy = function() {
this.element[0].removeEventListener("touchstart", touchStart);
mouseDestroy.apply(this, arguments)
}
})(jQuery);