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

📄 atlasuidragdrop.js

📁 《圣殿祭司的ASP.NET 2.0开发详解——使用C#》光盘内容.包含了书籍所含的源代码.非常经典的一本asp.net2.0的书籍
💻 JS
📖 第 1 页 / 共 4 页
字号:
//-----------------------------------------------------------------------
// 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 (window.testEvent) {
            ev = window.testEvent;
        }
        
                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 (window.testEvent) {
            ev = window.testEvent;
        }
        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;
        if (window.testEvent) {
            ev = window.testEvent;
        }
        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;
        if (window.testEvent) {
            ev = window.testEvent;
        }
        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;
        if (window.testEvent) {
            ev = window.testEvent;
        }
        ev.returnValue = (_potentialTarget == null);
    }
    
    function mouseMoveHandler() {
        this._drag();
    }
    
    function dragEnterHandler() {
        var ev = window.event;
        if (window.testEvent) {
            ev = window.testEvent;
        }
        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 (window.testEvent) {
            ev = window.testEvent;
        }

⌨️ 快捷键说明

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