You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.5 KiB
66 lines
2.5 KiB
var Param = (function () { |
|
function Param(target, e) { |
|
this.target = target; |
|
this.topTarget = e && e.topTarget; |
|
} |
|
return Param; |
|
}()); |
|
var Draggable = (function () { |
|
function Draggable(handler) { |
|
this.handler = handler; |
|
handler.on('mousedown', this._dragStart, this); |
|
handler.on('mousemove', this._drag, this); |
|
handler.on('mouseup', this._dragEnd, this); |
|
} |
|
Draggable.prototype._dragStart = function (e) { |
|
var draggingTarget = e.target; |
|
while (draggingTarget && !draggingTarget.draggable) { |
|
draggingTarget = draggingTarget.parent || draggingTarget.__hostTarget; |
|
} |
|
if (draggingTarget) { |
|
this._draggingTarget = draggingTarget; |
|
draggingTarget.dragging = true; |
|
this._x = e.offsetX; |
|
this._y = e.offsetY; |
|
this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragstart', e.event); |
|
} |
|
}; |
|
Draggable.prototype._drag = function (e) { |
|
var draggingTarget = this._draggingTarget; |
|
if (draggingTarget) { |
|
var x = e.offsetX; |
|
var y = e.offsetY; |
|
var dx = x - this._x; |
|
var dy = y - this._y; |
|
this._x = x; |
|
this._y = y; |
|
draggingTarget.drift(dx, dy, e); |
|
this.handler.dispatchToElement(new Param(draggingTarget, e), 'drag', e.event); |
|
var dropTarget = this.handler.findHover(x, y, draggingTarget).target; |
|
var lastDropTarget = this._dropTarget; |
|
this._dropTarget = dropTarget; |
|
if (draggingTarget !== dropTarget) { |
|
if (lastDropTarget && dropTarget !== lastDropTarget) { |
|
this.handler.dispatchToElement(new Param(lastDropTarget, e), 'dragleave', e.event); |
|
} |
|
if (dropTarget && dropTarget !== lastDropTarget) { |
|
this.handler.dispatchToElement(new Param(dropTarget, e), 'dragenter', e.event); |
|
} |
|
} |
|
} |
|
}; |
|
Draggable.prototype._dragEnd = function (e) { |
|
var draggingTarget = this._draggingTarget; |
|
if (draggingTarget) { |
|
draggingTarget.dragging = false; |
|
} |
|
this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragend', e.event); |
|
if (this._dropTarget) { |
|
this.handler.dispatchToElement(new Param(this._dropTarget, e), 'drop', e.event); |
|
} |
|
this._draggingTarget = null; |
|
this._dropTarget = null; |
|
}; |
|
return Draggable; |
|
}()); |
|
export default Draggable;
|
|
|