cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
93 lines (92 loc) • 2.88 kB
JavaScript
import env from "./env.mjs";
import { isCanvasEl, transformCoordWithViewport } from "./dom.mjs";
var MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;
var _calcOut = [];
var firefoxNotSupportOffsetXY = env.browser.firefox && +env.browser.version.split(".")[0] < 39;
function clientToLocal(el, e, out, calculate) {
out = out || {};
if (calculate) {
calculateZrXY(el, e, out);
} else if (firefoxNotSupportOffsetXY && e.layerX != null && e.layerX !== e.offsetX) {
out.zrX = e.layerX;
out.zrY = e.layerY;
} else if (e.offsetX != null) {
out.zrX = e.offsetX;
out.zrY = e.offsetY;
} else {
calculateZrXY(el, e, out);
}
return out;
}
function calculateZrXY(el, e, out) {
if (env.domSupported && el.getBoundingClientRect) {
var ex = e.clientX;
var ey = e.clientY;
if (isCanvasEl(el)) {
var box = el.getBoundingClientRect();
out.zrX = ex - box.left;
out.zrY = ey - box.top;
return;
} else {
if (transformCoordWithViewport(_calcOut, el, ex, ey)) {
out.zrX = _calcOut[0];
out.zrY = _calcOut[1];
return;
}
}
}
out.zrX = out.zrY = 0;
}
function getNativeEvent(e) {
return e || window.event;
}
function normalizeEvent(el, e, calculate) {
e = getNativeEvent(e);
if (e.zrX != null) {
return e;
}
var eventType = e.type;
var isTouch = eventType && eventType.indexOf("touch") >= 0;
if (!isTouch) {
clientToLocal(el, e, e, calculate);
var wheelDelta = getWheelDeltaMayPolyfill(e);
e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3;
} else {
var touch = eventType !== "touchend" ? e.targetTouches[0] : e.changedTouches[0];
touch && clientToLocal(el, touch, e, calculate);
}
var button = e.button;
if (e.which == null && button !== void 0 && MOUSE_EVENT_REG.test(e.type)) {
e.which = button & 1 ? 1 : button & 2 ? 3 : button & 4 ? 2 : 0;
}
return e;
}
function getWheelDeltaMayPolyfill(e) {
var rawWheelDelta = e.wheelDelta;
if (rawWheelDelta) {
return rawWheelDelta;
}
var deltaX = e.deltaX;
var deltaY = e.deltaY;
if (deltaX == null || deltaY == null) {
return rawWheelDelta;
}
var delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX);
var sign = deltaY > 0 ? -1 : deltaY < 0 ? 1 : deltaX > 0 ? -1 : 1;
return 3 * delta * sign;
}
function addEventListener(el, name, handler, opt) {
el.addEventListener(name, handler, opt);
}
function removeEventListener(el, name, handler, opt) {
el.removeEventListener(name, handler, opt);
}
var stop = function(e) {
e.preventDefault();
e.stopPropagation();
e.cancelBubble = true;
};
function isMiddleOrRightButtonOnMouseUpDown(e) {
return e.which === 2 || e.which === 3;
}
export { addEventListener, clientToLocal, getNativeEvent, isMiddleOrRightButtonOnMouseUpDown, normalizeEvent, removeEventListener, stop };