📄 dragdropscripts.js
字号:
var handler = this.get_events().getHandler('dragStart');
if(handler) handler(this,eventArgs);
this._recoverFromDomChanges();
this._wireEvents();
this._drag(/* isInitialDrag */ true);
},
_stopDragDrop : function(cancelled) {
var ev = window._event;
if (this._activeDragSource != null) {
this._unwireEvents();
if (!cancelled) {
// The drag operation is cancelled if there
// is no drop target.
cancelled = (this._underlyingTarget == null);
}
if (!cancelled && this._underlyingTarget != null) {
this._underlyingTarget.drop(this._activeDragSource.get_dragMode(), this._activeDragSource.get_dragDataType(),
this._activeDragSource.getDragData(this._activeContext));
}
this._activeDragSource.onDragEnd(cancelled);
var handler = this.get_events().getHandler('dragStop');
if(handler) handler(this,Sys.EventArgs.Empty);
this._activeDragVisual.style.position = this._activeDragVisual.originalPosition;
this._activeDragSource = null;
this._activeContext = null;
this._activeDragVisual = null;
this._isDragging = false;
this._potentialTarget = null;
ev.preventDefault();
}
},
_drag : function(isInitialDrag) {
var ev = window._event;
var mousePosition = { x: ev.clientX, y: ev.clientY };
// NOTE: We store the event object to be able to determine the current
// mouse position in Mozilla in other event handlers such as keydown.
document._lastPosition = mousePosition;
var scrollOffset = this.getScrollOffset(this._activeDragVisual, /* recursive */ true);
var position = this.addPoints(this.subtractPoints(mousePosition, this._activeDragVisual.startingPoint), scrollOffset);
// Check if the visual moved at all.
if (!isInitialDrag && parseInt(this._activeDragVisual.style.left) == position.x && parseInt(this._activeDragVisual.style.top) == position.y) {
return;
}
$common.setLocation(this._activeDragVisual, position);
// Monitor DOM changes.
this._prepareForDomChanges();
this._activeDragSource.onDrag();
this._recoverFromDomChanges();
// Find a potential target.
this._potentialTarget = this._findPotentialTarget(this._activeDragSource, this._activeDragVisual);
var movedToOtherTarget = (this._potentialTarget != this._underlyingTarget || this._potentialTarget == null);
// Check if we are leaving an underlying target.
if (movedToOtherTarget && this._underlyingTarget != null) {
this._leaveTarget(this._activeDragSource, this._underlyingTarget);
}
if (this._potentialTarget != null) {
// Check if we are entering a new target.
if (movedToOtherTarget) {
this._underlyingTarget = this._potentialTarget;
// Enter the new target.
this._enterTarget(this._activeDragSource, this._underlyingTarget);
}
else {
this._moveInTarget(this._activeDragSource, this._underlyingTarget);
}
}
else {
this._underlyingTarget = null;
}
},
_wireEvents : function() {
$addHandler(document, "mouseup", this._mouseUpHandler);
$addHandler(document, "mousemove", this._documentMouseMoveHandler);
$addHandler(document.body, "dragover", this._documentDragOverHandler);
$addHandler(this._activeDragVisual, "dragstart", this._dragStartHandler);
$addHandler(this._activeDragVisual, "dragend", this._mouseUpHandler);
$addHandler(this._activeDragVisual, "drag", this._mouseMoveHandler);
},
_unwireEvents : function() {
$removeHandler(this._activeDragVisual, "drag", this._mouseMoveHandler);
$removeHandler(this._activeDragVisual, "dragend", this._mouseUpHandler);
$removeHandler(this._activeDragVisual, "dragstart", this._dragStartHandler);
$removeHandler(document.body, "dragover", this._documentDragOverHandler);
$removeHandler(document, "mousemove", this._documentMouseMoveHandler);
$removeHandler(document, "mouseup", this._mouseUpHandler);
},
registerDropTarget : function(dropTarget) {
if (this._dropTargets == null) {
this._dropTargets = [];
}
Array.add(this._dropTargets, dropTarget);
this._wireDropTargetEvents(dropTarget);
},
unregisterDropTarget : function(dropTarget) {
this._unwireDropTargetEvents(dropTarget);
if (this._dropTargets) {
Array.remove(this._dropTargets, dropTarget);
}
},
_wireDropTargetEvents : function(dropTarget) {
var associatedElement = dropTarget.get_dropTargetElement();
associatedElement._dropTarget = dropTarget;
$addHandler(associatedElement, "dragenter", this._dragEnterHandler);
$addHandler(associatedElement, "dragleave", this._dragLeaveHandler);
$addHandler(associatedElement, "dragover", this._dragOverHandler);
$addHandler(associatedElement, "drop", this._dropHandler);
},
_unwireDropTargetEvents : function(dropTarget) {
var associatedElement = dropTarget.get_dropTargetElement();
// make sure that the handlers are not removed twice
if(associatedElement._dropTarget)
{
associatedElement._dropTarget = null;
$removeHandler(associatedElement, "dragenter", this._dragEnterHandler);
$removeHandler(associatedElement, "dragleave", this._dragLeaveHandler);
$removeHandler(associatedElement, "dragover", this._dragOverHandler);
$removeHandler(associatedElement, "drop", this._dropHandler);
}
},
_onDragStart : function(ev) {
window._event = ev;
document.selection.empty();
var dt = ev.dataTransfer;
if(!dt && ev.rawEvent) dt = ev.rawEvent.dataTransfer;
var dataType = this._activeDragSource.get_dragDataType().toLowerCase();
var data = this._activeDragSource.getDragData(this._activeContext);
if (data) {
// TODO: How do we want to deal with 'non-compatible types'?
if (dataType != "text" && dataType != "url") {
dataType = "text";
if (data.innerHTML != null) {
data = data.innerHTML;
}
}
dt.effectAllowed = "move";
dt.setData(dataType, data.toString());
}
},
_onMouseUp : function(ev) {
window._event = ev;
this._stopDragDrop(false);
},
_onDocumentMouseMove : function(ev) {
window._event = ev;
this._dragDrop();
},
_onDocumentDragOver : function(ev) {
window._event = ev;
if(this._potentialTarget) ev.preventDefault();
//ev.returnValue = (_potentialTarget == null);
},
_onMouseMove : function(ev) {
window._event = ev;
this._drag();
},
_onDragEnter : function(ev) {
window._event = ev;
if (this._isDragging) {
ev.preventDefault();
//ev.returnValue = false;
}
else {
// An external object is dragged to the drop target.
var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));
for (var i = 0; i < dataObjects.length; i++) {
this._dropTarget.onDragEnterTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);
}
}
},
_onDragLeave : function(ev) {
window._event = ev;
if (this._isDragging) {
ev.preventDefault();
//ev.returnValue = false;
}
else {
// An external object is dragged to the drop target.
var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));
for (var i = 0; i < dataObjects.length; i++) {
this._dropTarget.onDragLeaveTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);
}
}
},
_onDragOver : function(ev) {
window._event = ev;
if (this._isDragging) {
ev.preventDefault();
//ev.returnValue = false;
}
else {
// An external object is dragged over the drop target.
var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));
for (var i = 0; i < dataObjects.length; i++) {
this._dropTarget.onDragInTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);
}
}
},
_onDrop : function(ev) {
window._event = ev;
if (!this._isDragging) {
// An external object is dropped on the drop target.
var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target));
for (var i = 0; i < dataObjects.length; i++) {
this._dropTarget.drop(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value);
}
}
ev.preventDefault();
//ev.returnValue = false;
},
_getDropTarget : function(element) {
while (element) {
if (element._dropTarget != null) {
return element._dropTarget;
}
element = element.parentNode;
}
return null;
},
_dragDrop : function() {
if (this._isDragging) {
return;
}
this._isDragging = true;
this._activeDragVisual.dragDrop();
document.selection.empty();
},
_moveInTarget : function(dragSource, dropTarget) {
// Monitor DOM changes.
this._prepareForDomChanges();
dropTarget.onDragInTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));
this._recoverFromDomChanges();
},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -