⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atlasuidragdrop.js

📁 《圣殿祭司的ASP.NET 2.0开发详解——使用C#》光盘内容.包含了书籍所含的源代码.非常经典的一本asp.net2.0的书籍
💻 JS
📖 第 1 页 / 共 3 页
字号:
//-----------------------------------------------------------------------// Copyright (C) Microsoft Corporation. All rights reserved.//-----------------------------------------------------------------------// AtlasUIDragDrop.js// Atlas Drag and Drop UI Framework.Web.UI._DragDropManager =function(){var _instance;this._getInstance =function(){if (_instance ==null){if (Web.Application.get_type()==Web.ApplicationType.InternetExplorer){_instance =new Web.UI.IEDragDropManager();}else {_instance =new Web.UI.GenericDragDropManager();}_instance.initialize();}return _instance;}this.startDragDrop =function(dragSource,dragVisual,context){this._getInstance().startDragDrop(dragSource,dragVisual,context);}this.registerDropTarget =function(target){this._getInstance().registerDropTarget(target);}this.unregisterDropTarget =function(target){this._getInstance().unregisterDropTarget(target);}}Web.UI.DragDropManager =new Web.UI._DragDropManager();Web.UI.IDragSource =function(){this.get_dataType =Function.abstractMethod;this.get_data =Function.abstractMethod;this.get_dragMode =Function.abstractMethod;this.onDragStart =Function.abstractMethod;this.onDrag =Function.abstractMethod;this.onDragEnd =Function.abstractMethod;}Type.registerInterface('Web.UI.IDragSource');Web.UI.IDropTarget =function(){this.get_dropTargetElement =Function.abstractMethod;this.canDrop =Function.abstractMethod;this.drop =Function.abstractMethod;this.onDragEnterTarget =Function.abstractMethod;this.onDragLeaveTarget =Function.abstractMethod;this.onDragInTarget =Function.abstractMethod;}Type.registerInterface('Web.UI.IDropTarget');Web.UI.DragMode =Web.Enum.create('Copy','Move');Web.UI.IEDragDropManager =function(){Web.UI.IEDragDropManager.initializeBase(this);var _dropTargets;var _radius =10;var _activeDragVisual;var _activeContext;var _activeDragSource;var _underlyingTarget;var _oldOffset;var _potentialTarget;var _isDragging =false;var _mouseUpHandler;var _documentMouseMoveHandler;var _documentDragOverHandler;var _dragStartHandler;var _mouseMoveHandler;var _dragEnterHandler;var _dragLeaveHandler;var _dragOverHandler;var _dropHandler;this.initialize =function(){Web.UI.IEDragDropManager.callBaseMethod(this,'initialize');_mouseUpHandler =Function.createDelegate(this,mouseUpHandler);_documentMouseMoveHandler =Function.createDelegate(this,documentMouseMoveHandler);_documentDragOverHandler =Function.createDelegate(this,documentDragOverHandler);_dragStartHandler =Function.createDelegate(this,dragStartHandler);_mouseMoveHandler =Function.createDelegate(this,mouseMoveHandler);_dragEnterHandler =Function.createDelegate(this,dragEnterHandler);_dragLeaveHandler =Function.createDelegate(this,dragLeaveHandler);_dragOverHandler =Function.createDelegate(this,dragOverHandler);_dropHandler =Function.createDelegate(this,dropHandler);}Web.UI.IEDragDropManager.registerBaseMethod(this,'initialize');this.dispose =function(){for (var i =0;i <_dropTargets;i++){this.unregisterDropTarget(_dropTargets[i]);}Web.UI.IEDragDropManager.callBaseMethod(this,'dispose');}Web.UI.IEDragDropManager.registerBaseMethod(this,'dispose');this.startDragDrop =function(dragSource,dragVisual,context){var ev =window.event;if (_isDragging){return;}_underlyingTarget =null;_activeDragSource =dragSource;_activeDragVisual =dragVisual;_activeContext =context;var mousePosition ={x:ev.clientX,y:ev.clientY };dragVisual.originalPosition =dragVisual.style.position;if (dragVisual.style.position.length ==0){dragVisual.originalPosition =dragVisual.style.position ="absolute";}document._lastPosition =mousePosition;dragVisual.startingPoint =mousePosition;var scrollOffset =this.getScrollOffset(dragVisual,true);dragVisual.startingPoint =this.addPoints(dragVisual.startingPoint,scrollOffset);if (dragVisual.style.position =="absolute"){dragVisual.startingPoint =this.subtractPoints(dragVisual.startingPoint,Web.UI.Control.getLocation(dragVisual));}else {var left =parseInt(dragVisual.style.left);var top =parseInt(dragVisual.style.top);if (isNaN(left))left ="0";if (isNaN(top))top ="0";dragVisual.startingPoint =this.subtractPoints(dragVisual.startingPoint,{x:left,y:top });}this._prepareForDomChanges();dragSource.onDragStart();this._recoverFromDomChanges();this._wireEvents();this._drag(true);}Web.UI.IEDragDropManager.registerBaseMethod(this,'startDragDrop');this._stopDragDrop =function(cancelled){var ev =window.event;if (_activeDragSource !=null){this._unwireEvents();if (!cancelled){cancelled =(_underlyingTarget ==null);}if (!cancelled &&_underlyingTarget !=null){_underlyingTarget.drop(_activeDragSource.get_dragMode(),_activeDragSource.get_dataType(),_activeDragSource.get_data(_activeContext));}_activeDragSource.onDragEnd(cancelled);_activeDragVisual.style.position =_activeDragVisual.originalPosition;_activeDragSource =null;_activeContext =null;_activeDragVisual =null;_isDragging =false;_potentialTarget =null;ev.returnValue =false;}}Web.UI.IEDragDropManager.registerBaseMethod(this,'_stopDragDrop');this._drag =function(isInitialDrag){var ev =window.event;var mousePosition ={x:ev.clientX,y:ev.clientY };document._lastPosition =mousePosition;var scrollOffset =this.getScrollOffset(_activeDragVisual,true);var position =this.addPoints(this.subtractPoints(mousePosition,_activeDragVisual.startingPoint),scrollOffset);if (!isInitialDrag &&parseInt(_activeDragVisual.style.left)==position.x &&parseInt(_activeDragVisual.style.top)==position.y){return;}Web.UI.Control.setLocation(_activeDragVisual,position);this._prepareForDomChanges();_activeDragSource.onDrag();this._recoverFromDomChanges();_potentialTarget =this._findPotentialTarget(_activeDragSource,_activeDragVisual);var movedToOtherTarget =(_potentialTarget !=_underlyingTarget ||_potentialTarget ==null);if (movedToOtherTarget &&_underlyingTarget !=null){this._leaveTarget(_activeDragSource,_underlyingTarget);}if (_potentialTarget !=null){if (movedToOtherTarget){_underlyingTarget =_potentialTarget;this._enterTarget(_activeDragSource,_underlyingTarget);}else {this._moveInTarget(_activeDragSource,_underlyingTarget);}}else {_underlyingTarget =null;}}Web.UI.IEDragDropManager.registerBaseMethod(this,'_drag');this._wireEvents =function(){document.attachEvent("onmouseup",_mouseUpHandler);document.attachEvent("onmousemove",_documentMouseMoveHandler);document.body.attachEvent("ondragover",_documentDragOverHandler);_activeDragVisual.attachEvent("ondragstart",_dragStartHandler);_activeDragVisual.attachEvent("ondragend",_mouseUpHandler);_activeDragVisual.attachEvent("ondrag",_mouseMoveHandler);}Web.UI.IEDragDropManager.registerBaseMethod(this,'_wireEvents');this._unwireEvents =function(){_activeDragVisual.detachEvent("ondrag",_mouseMoveHandler);_activeDragVisual.detachEvent("ondragend",_mouseUpHandler);_activeDragVisual.detachEvent("ondragstart",_dragStartHandler);document.body.detachEvent("ondragover",documentDragOverHandler);document.detachEvent("onmousemove",_documentMouseMoveHandler);document.detachEvent("onmouseup",_mouseUpHandler);}Web.UI.IEDragDropManager.registerBaseMethod(this,'_unwireEvents');this.registerDropTarget =function(dropTarget){if (_dropTargets ==null){_dropTargets =[];}_dropTargets.add(dropTarget);this._wireDropTargetEvents(dropTarget);}Web.UI.IEDragDropManager.registerBaseMethod(this,'registerDropTarget');this.unregisterDropTarget =function(dropTarget){this._unwireDropTargetEvents(dropTarget);_dropTargets.remove(dropTarget);dropTarget.dispose();}Web.UI.IEDragDropManager.registerBaseMethod(this,'unregisterDropTarget');this._wireDropTargetEvents =function(dropTarget){var associatedElement =dropTarget.get_dropTargetElement();associatedElement._dropTarget =dropTarget;associatedElement.attachEvent("ondragenter",_dragEnterHandler);associatedElement.attachEvent("ondragleave",_dragLeaveHandler);associatedElement.attachEvent("ondragover",_dragOverHandler);associatedElement.attachEvent("ondrop",_dropHandler);}Web.UI.IEDragDropManager.registerBaseMethod(this,'_wireDropTargetEvents');this._unwireDropTargetEvents =function(dropTarget){var associatedElement =dropTarget.get_dropTargetElement();associatedElement._dropTarget =null;associatedElement.detachEvent("ondragenter",_dragEnterHandler);associatedElement.detachEvent("ondragleave",_dragLeaveHandler);associatedElement.detachEvent("ondragover",_dragOverHandler);associatedElement.detachEvent("ondrop",_dropHandler);}Web.UI.IEDragDropManager.registerBaseMethod(this,'_unwireDropTargetEvents');function dragStartHandler(){var ev =window.event;document.selection.empty();var dt =ev.dataTransfer;var dataType =_activeDragSource.get_dataType().toLowerCase();var data =_activeDragSource.get_data(_activeContext);if (data !=null){if (dataType !="text"&&dataType !="url"){dataType ="text";if (data.innerHTML !=null){data =data.innerHTML;}}dt.effectAllowed ="move";dt.setData(dataType,data.toString());}}function mouseUpHandler(){this._stopDragDrop(false);}function documentMouseMoveHandler(){this._dragDrop();}function documentDragOverHandler(){var ev =window.event;ev.returnValue =(_potentialTarget ==null);}function mouseMoveHandler(){this._drag();}function dragEnterHandler(){var ev =window.event;if (_isDragging){ev.returnValue =false;}else {var dataObjects =Web.UI.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.srcElement));for (var i =0;i <dataObjects.length;i++){this._dropTarget.onDragEnterTarget(Web.UI.DragMode.Copy,dataObjects[i].type,dataObjects[i].value);}}}function dragLeaveHandler(){var ev =window.event;if (_isDragging){ev.returnValue =false;}else {var dataObjects =Web.UI.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.srcElement));for (var i =0;i <dataObjects.length;i++){this._dropTarget.onDragLeaveTarget(Web.UI.DragMode.Copy,dataObjects[i].type,dataObjects[i].value);}}}function dragOverHandler(){var ev =window.event;if (_isDragging){ev.returnValue =false;}else {var dataObjects =Web.UI.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.srcElement));for (var i =0;i <dataObjects.length;i++){this._dropTarget.onDragInTarget(Web.UI.DragMode.Copy,dataObjects[i].type,dataObjects[i].value);}}}function dropHandler(){var ev =window.event;if (!_isDragging){var dataObjects =Web.UI.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.srcElement));for (var i =0;i <dataObjects.length;i++){this._dropTarget.drop(Web.UI.DragMode.Copy,dataObjects[i].type,dataObjects[i].value);}}ev.returnValue =false;}this._getDropTarget =function(element){while (element){if (element._dropTarget !=null){return element._dropTarget;}element =element.parentNode;}return null;}this._dragDrop =function(){if (_isDragging){return;}_isDragging =true;_activeDragVisual.dragDrop();document.selection.empty();}this._moveInTarget =function(dragSource,dropTarget){this._prepareForDomChanges();dropTarget.onDragInTarget(dragSource.get_dragMode(),dragSource.get_dataType(),dragSource.get_data(_activeContext));this._recoverFromDomChanges();}this._enterTarget =function(dragSource,dropTarget){this._prepareForDomChanges();dropTarget.onDragEnterTarget(dragSource.get_dragMode(),dragSource.get_dataType(),dragSource.get_data(_activeContext));this._recoverFromDomChanges();}this._leaveTarget =function(dragSource,dropTarget){this._prepareForDomChanges();dropTarget.onDragLeaveTarget(dragSource.get_dragMode(),dragSource.get_dataType(),dragSource.get_data(_activeContext));this._recoverFromDomChanges();}this._findPotentialTarget =function(dragSource,dragVisual){var ev =window.event;if (_dropTargets ==null){return null;}var type =dragSource.get_dataType();var mode =dragSource.get_dragMode();var scrollOffset =this.getScrollOffset(document.body,true);var x =ev.clientX +scrollOffset.x;var y =ev.clientY +scrollOffset.y;var cursorRect ={x:x -_radius,y:y -_radius,width:_radius *2,height:_radius *2 };var targetRect;for (var i =0;i <_dropTargets.length;i++){targetRect =Web.UI.Control.getBounds(_dropTargets[i].get_dropTargetElement());if (Web.UI.Control.overlaps(cursorRect,targetRect)&&_dropTargets[i].canDrop(mode,type)){return _dropTargets[i];}}return null;}this._prepareForDomChanges =function(){_oldOffset =Web.UI.Control.getLocation(_activeDragVisual);}this._recoverFromDomChanges =function(){var newOffset =Web.UI.Control.getLocation(_activeDragVisual);if (_oldOffset.x !=newOffset.x ||_oldOffset.y !=newOffset.y){_activeDragVisual.startingPoint =this.subtractPoints(_activeDragVisual.startingPoint,this.subtractPoints(_oldOffset,newOffset));scrollOffset =this.getScrollOffset(_activeDragVisual,true);var position =this.addPoints(this.subtractPoints(document._lastPosition,_activeDragVisual.startingPoint),scrollOffset);Web.UI.Control.setLocation(_activeDragVisual,position);}}this.addPoints =function(p1,p2){return {x:p1.x +p2.x,y:p1.y +p2.y };}this.subtractPoints =function(p1,p2){return {x:p1.x -p2.x,y:p1.y -p2.y };}this.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;if (parent ==document.body &&(left !=0 &&top !=0))break;parent =parent.parentNode;}}return {x:left,y:top };}this.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 };}this.getNextSibling =function(item){for (item =item.nextSibling;item !=null;item =item.nextSibling){if (item.innerHTML !=null){return item;}}return null;}this.hasParent =function(element){return (element.parentNode !=null &&element.parentNode.tagName !=null);}}Type.registerClass('Web.UI.IEDragDropManager',Web.Component);Web.UI.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++){if (dropTarget.canDrop(Web.UI.DragMode.Copy,dataTypes[i])){data =ev.dataTransfer.getData(dataTypes[i]);if (data !=null){dataObjects.add({type :dataTypes[i],value :data });}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -