konva
Version:
<p align="center"> <img src="https://raw.githubusercontent.com/konvajs/konvajs.github.io/master/apple-touch-icon-180x180.png" alt="Konva logo" height="180" /> </p>
103 lines (102 loc) • 3.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var Global_1 = require("./Global");
var Util_1 = require("./Util");
exports.DD = {
get isDragging() {
var flag = false;
exports.DD._dragElements.forEach(function (elem) {
if (elem.isDragging) {
flag = true;
}
});
return flag;
},
justDragged: false,
get node() {
var node;
exports.DD._dragElements.forEach(function (elem) {
node = elem.node;
});
return node;
},
_dragElements: new Map(),
_drag: function (evt) {
exports.DD._dragElements.forEach(function (elem, key) {
var node = elem.node;
var stage = node.getStage();
stage.setPointersPositions(evt);
if (elem.pointerId === undefined) {
elem.pointerId = Util_1.Util._getFirstPointerId(evt);
}
var pos = stage._changedPointerPositions.find(function (pos) { return pos.id === elem.pointerId; });
if (!pos) {
return;
}
if (!elem.isDragging) {
var dragDistance = node.dragDistance();
var distance = Math.max(Math.abs(pos.x - elem.startPointerPos.x), Math.abs(pos.y - elem.startPointerPos.y));
if (distance < dragDistance) {
return;
}
elem.isDragging = true;
node.fire('dragstart', {
type: 'dragstart',
target: node,
evt: evt
}, true);
if (!node.isDragging()) {
return;
}
}
node._setDragPosition(evt, elem);
node.fire('dragmove', {
type: 'dragmove',
target: node,
evt: evt
}, true);
});
},
_endDragBefore: function (evt) {
exports.DD._dragElements.forEach(function (elem, key) {
var node = elem.node;
var stage = node.getStage();
stage.setPointersPositions(evt);
var pos = stage._changedPointerPositions.find(function (pos) { return pos.id === elem.pointerId; });
if (!pos) {
return;
}
if (elem.isDragging) {
exports.DD.justDragged = true;
Global_1.Konva.listenClickTap = false;
}
elem.dragStopped = true;
elem.isDragging = false;
var drawNode = elem.node.getLayer() ||
(elem.node instanceof Global_1.Konva['Stage'] && elem.node);
if (drawNode) {
drawNode.draw();
}
});
},
_endDragAfter: function (evt) {
exports.DD._dragElements.forEach(function (elem, key) {
if (elem.dragStopped) {
elem.node.fire('dragend', {
type: 'dragend',
target: elem.node,
evt: evt
}, true);
exports.DD._dragElements.delete(key);
}
});
}
};
if (Global_1.Konva.isBrowser) {
window.addEventListener('mouseup', exports.DD._endDragBefore, true);
window.addEventListener('touchend', exports.DD._endDragBefore, true);
window.addEventListener('mousemove', exports.DD._drag);
window.addEventListener('touchmove', exports.DD._drag);
window.addEventListener('mouseup', exports.DD._endDragAfter, false);
window.addEventListener('touchend', exports.DD._endDragAfter, false);
}