📄 dragdropscripts.js
字号:
_enterTarget : function(dragSource, dropTarget) {
// Monitor DOM changes.
this._prepareForDomChanges();
dropTarget.onDragEnterTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));
this._recoverFromDomChanges();
},
_leaveTarget : function(dragSource, dropTarget) {
// Monitor DOM changes.
this._prepareForDomChanges();
dropTarget.onDragLeaveTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext));
this._recoverFromDomChanges();
},
_findPotentialTarget : function(dragSource, dragVisual) {
var ev = window._event;
if (this._dropTargets == null) {
return null;
}
var type = dragSource.get_dragDataType();
var mode = dragSource.get_dragMode();
var data = dragSource.getDragData(this._activeContext);
// Get the current cursor location.
var scrollOffset = this.getScrollOffset(document.body, /* recursive */ true);
var x = ev.clientX + scrollOffset.x;
var y = ev.clientY + scrollOffset.y;
var cursorRect = { x: x - this._radius, y: y - this._radius, width: this._radius * 2, height: this._radius * 2 };
// Find any targets near the current cursor location.
var targetRect;
for (var i = 0; i < this._dropTargets.length; i++) {
targetRect = $common.getBounds(this._dropTargets[i].get_dropTargetElement());
if ($common.overlaps(cursorRect, targetRect) && this._dropTargets[i].canDrop(mode, type, data)) {
return this._dropTargets[i];
}
}
return null;
},
_prepareForDomChanges : function() {
this._oldOffset = $common.getLocation(this._activeDragVisual);
},
_recoverFromDomChanges : function() {
var newOffset = $common.getLocation(this._activeDragVisual);
if (this._oldOffset.x != newOffset.x || this._oldOffset.y != newOffset.y) {
this._activeDragVisual.startingPoint = this.subtractPoints(this._activeDragVisual.startingPoint, this.subtractPoints(this._oldOffset, newOffset));
scrollOffset = this.getScrollOffset(this._activeDragVisual, /* recursive */ true);
var position = this.addPoints(this.subtractPoints(document._lastPosition, this._activeDragVisual.startingPoint), scrollOffset);
$common.setLocation(this._activeDragVisual, position);
}
},
addPoints : function(p1, p2) {
return { x: p1.x + p2.x, y: p1.y + p2.y };
},
subtractPoints : function(p1, p2) {
return { x: p1.x - p2.x, y: p1.y - p2.y };
},
// -- Drag and drop helper methods.
getScrollOffset : function(element, recursive) {
var left = element.scrollLeft;
var top = element.scrollTop;
if (recursive) {
var parent = element.parentNode;
while (parent != null && parent.scrollLeft != null) {
left += parent.scrollLeft;
top += parent.scrollTop;
// Don't include anything below the body.
if (parent == document.body && (left != 0 && top != 0))
break;
parent = parent.parentNode;
}
}
return { x: left, y: top };
},
getBrowserRectangle : function() {
var width = window.innerWidth;
var height = window.innerHeight;
if (width == null) {
width = document.body.clientWidth;
}
if (height == null) {
height = document.body.clientHeight;
}
return { x: 0, y: 0, width: width, height: height };
},
getNextSibling : function(item) {
for (item = item.nextSibling; item != null; item = item.nextSibling) {
if (item.innerHTML != null) {
return item;
}
}
return null;
},
hasParent : function(element) {
return (element.parentNode != null && element.parentNode.tagName != null);
}
}
AjaxControlToolkit.IEDragDropManager.registerClass('AjaxControlToolkit.IEDragDropManager', Sys.Component);
AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget = function(dropTarget) {
if (dropTarget == null) {
return [];
}
var ev = window._event;
var dataObjects = [];
var dataTypes = [ "URL", "Text" ];
var data;
for (var i = 0; i < dataTypes.length; i++) {
var dt = ev.dataTransfer;
if(!dt && ev.rawEvent) dt = ev.rawEvent.dataTransfer;
data = dt.getData(dataTypes[i]);
if (dropTarget.canDrop(AjaxControlToolkit.DragMode.Copy, dataTypes[i], data)) {
if (data) {
Array.add(dataObjects, { type : dataTypes[i], value : data });
}
}
}
return dataObjects;
}
AjaxControlToolkit.GenericDragDropManager = function() {
AjaxControlToolkit.GenericDragDropManager.initializeBase(this);
this._dropTargets = null;
// Radius of the cursor used to determine what drop target we
// are hovering. Anything below the cursor's zone may be a
// potential drop target.
this._scrollEdgeConst = 40;
this._scrollByConst = 10;
this._scroller = null;
this._scrollDeltaX = 0;
this._scrollDeltaY = 0;
this._activeDragVisual = null;
this._activeContext = null;
this._activeDragSource = null;
this._oldOffset = null;
this._potentialTarget = null;
this._mouseUpHandler = null;
this._mouseMoveHandler = null;
this._keyPressHandler = null;
this._scrollerTickHandler = null;
}
AjaxControlToolkit.GenericDragDropManager.prototype = {
initialize : function() {
AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "initialize");
this._mouseUpHandler = Function.createDelegate(this, this._onMouseUp);
this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove);
this._keyPressHandler = Function.createDelegate(this, this._onKeyPress);
this._scrollerTickHandler = Function.createDelegate(this, this._onScrollerTick);
if (Sys.Browser.agent === Sys.Browser.Safari) {
AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer(this);
}
this._scroller = new Sys.Timer();
this._scroller.set_interval(10);
this._scroller.add_tick(this._scrollerTickHandler);
},
startDragDrop : function(dragSource, dragVisual, context) {
this._activeDragSource = dragSource;
this._activeDragVisual = dragVisual;
this._activeContext = context;
AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "startDragDrop", [dragSource, dragVisual, context]);
},
_stopDragDrop : function(cancelled) {
this._scroller.set_enabled(false);
AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "_stopDragDrop", [cancelled]);
},
_drag : function(isInitialDrag) {
AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "_drag", [isInitialDrag]);
this._autoScroll();
},
_wireEvents : function() {
$addHandler(document, "mouseup", this._mouseUpHandler);
$addHandler(document, "mousemove", this._mouseMoveHandler);
$addHandler(document, "keypress", this._keyPressHandler);
},
_unwireEvents : function() {
$removeHandler(document, "keypress", this._keyPressHandler);
$removeHandler(document, "mousemove", this._mouseMoveHandler);
$removeHandler(document, "mouseup", this._mouseUpHandler);
},
_wireDropTargetEvents : function(dropTarget) {
//
},
_unwireDropTargetEvents : function(dropTarget) {
//
},
_onMouseUp : function(e) {
window._event = e;
this._stopDragDrop(false);
},
_onMouseMove : function(e) {
window._event = e;
this._drag();
},
_onKeyPress : function(e) {
window._event = e;
// Escape.
var k = e.keyCode ? e.keyCode : e.rawEvent.keyCode;
if (k == 27) {
this._stopDragDrop(/* cancel */ true);
}
},
_autoScroll : function() {
var ev = window._event;
var browserRect = this.getBrowserRectangle();
if (browserRect.width > 0) {
this._scrollDeltaX = this._scrollDeltaY = 0;
if (ev.clientX < browserRect.x + this._scrollEdgeConst) this._scrollDeltaX = -this._scrollByConst;
else if (ev.clientX > browserRect.width - this._scrollEdgeConst) this._scrollDeltaX = this._scrollByConst;
if (ev.clientY < browserRect.y + this._scrollEdgeConst) this._scrollDeltaY = -this._scrollByConst;
else if (ev.clientY > browserRect.height - this._scrollEdgeConst) this._scrollDeltaY = this._scrollByConst;
if (this._scrollDeltaX != 0 || this._scrollDeltaY != 0) {
this._scroller.set_enabled(true);
}
else {
this._scroller.set_enabled(false);
}
}
},
_onScrollerTick : function() {
var oldLeft = document.body.scrollLeft;
var oldTop = document.body.scrollTop;
window.scrollBy(this._scrollDeltaX, this._scrollDeltaY);
var newLeft = document.body.scrollLeft;
var newTop = document.body.scrollTop;
var dragVisual = this._activeDragVisual;
var position = { x: parseInt(dragVisual.style.left) + (newLeft - oldLeft), y: parseInt(dragVisual.style.top) + (newTop - oldTop) };
$common.setLocation(dragVisual, position);
}
}
AjaxControlToolkit.GenericDragDropManager.registerClass('AjaxControlToolkit.GenericDragDropManager', AjaxControlToolkit.IEDragDropManager);
if (Sys.Browser.agent === Sys.Browser.Safari) {
AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer = function(ddm) {
ddm._getScrollOffset = ddm.getScrollOffset;
ddm.getScrollOffset = function(element, recursive) {
return { x: 0, y: 0 };
}
ddm._getBrowserRectangle = ddm.getBrowserRectangle;
ddm.getBrowserRectangle = function() {
var browserRect = ddm._getBrowserRectangle();
var offset = ddm._getScrollOffset(document.body, true);
return { x: browserRect.x + offset.x, y: browserRect.y + offset.y,
width: browserRect.width + offset.x, height: browserRect.height + offset.y };
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -