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

📄 mousedefaults.js

📁 用来在地图上做操作GIS,在地图上做标记
💻 JS
字号:
/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license. * See http://svn.openlayers.org/trunk/openlayers/release-license.txt  * for the full text of the license. *//** * @requires OpenLayers/Control.js *  * Class: OpenLayers.Control.MouseDefaults * * Inherits from: *  - <OpenLayers.Control> */OpenLayers.Control.MouseDefaults = OpenLayers.Class(OpenLayers.Control, {    /** WARNING WARNING WARNING!!!        This class is DEPRECATED in 2.4 and will be removed by 3.0.        If you need this functionality, use Control.Navigation instead!!! */    /**      * Property: performedDrag     * {Boolean}     */    performedDrag: false,    /**      * Property: wheelObserver      * {Function}     */    wheelObserver: null,    /**      * Constructor: OpenLayers.Control.MouseDefaults     */    initialize: function() {        OpenLayers.Control.prototype.initialize.apply(this, arguments);    },    /**     * APIMethod: destroy     */        destroy: function() {                if (this.handler) {            this.handler.destroy();        }        this.handler = null;        this.map.events.unregister( "click", this, this.defaultClick );        this.map.events.unregister( "dblclick", this, this.defaultDblClick );        this.map.events.unregister( "mousedown", this, this.defaultMouseDown );        this.map.events.unregister( "mouseup", this, this.defaultMouseUp );        this.map.events.unregister( "mousemove", this, this.defaultMouseMove );        this.map.events.unregister( "mouseout", this, this.defaultMouseOut );        //unregister mousewheel events specifically on the window and document        OpenLayers.Event.stopObserving(window, "DOMMouseScroll",                                         this.wheelObserver);        OpenLayers.Event.stopObserving(window, "mousewheel",                                         this.wheelObserver);        OpenLayers.Event.stopObserving(document, "mousewheel",                                         this.wheelObserver);        this.wheelObserver = null;                              OpenLayers.Control.prototype.destroy.apply(this, arguments);            },    /**     * Method: draw     */    draw: function() {        this.map.events.register( "click", this, this.defaultClick );        this.map.events.register( "dblclick", this, this.defaultDblClick );        this.map.events.register( "mousedown", this, this.defaultMouseDown );        this.map.events.register( "mouseup", this, this.defaultMouseUp );        this.map.events.register( "mousemove", this, this.defaultMouseMove );        this.map.events.register( "mouseout", this, this.defaultMouseOut );        this.registerWheelEvents();    },    /**     * Method: registerWheelEvents     */    registerWheelEvents: function() {        this.wheelObserver = OpenLayers.Function.bindAsEventListener(            this.onWheelEvent, this        );                //register mousewheel events specifically on the window and document        OpenLayers.Event.observe(window, "DOMMouseScroll", this.wheelObserver);        OpenLayers.Event.observe(window, "mousewheel", this.wheelObserver);        OpenLayers.Event.observe(document, "mousewheel", this.wheelObserver);    },    /**     * Method: defaultClick     *      * Parameters:     * evt - {Event}      *     * Returns:     * {Boolean}     */    defaultClick: function (evt) {        if (!OpenLayers.Event.isLeftClick(evt)) return;        var notAfterDrag = !this.performedDrag;        this.performedDrag = false;        return notAfterDrag;    },    /**     * Method: defaultDblClick     *      * Parameters:     * evt - {Event}      */    defaultDblClick: function (evt) {        var newCenter = this.map.getLonLatFromViewPortPx( evt.xy );         this.map.setCenter(newCenter, this.map.zoom + 1);        OpenLayers.Event.stop(evt);        return false;    },    /**     * Method: defaultMouseDown     *      * Parameters:     * evt - {Event}      */    defaultMouseDown: function (evt) {        if (!OpenLayers.Event.isLeftClick(evt)) return;        this.mouseDragStart = evt.xy.clone();        this.performedDrag  = false;        if (evt.shiftKey) {            this.map.div.style.cursor = "crosshair";            this.zoomBox = OpenLayers.Util.createDiv('zoomBox',                                                     this.mouseDragStart,                                                     null,                                                     null,                                                     "absolute",                                                     "2px solid red");            this.zoomBox.style.backgroundColor = "white";            this.zoomBox.style.filter = "alpha(opacity=50)"; // IE            this.zoomBox.style.opacity = "0.50";            this.zoomBox.style.fontSize = "1px";            this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;            this.map.viewPortDiv.appendChild(this.zoomBox);        }        document.onselectstart=function() { return false; }        OpenLayers.Event.stop(evt);    },    /**     * Method: defaultMouseMove     *     * Parameters:     * evt - {Event}      */    defaultMouseMove: function (evt) {        // record the mouse position, used in onWheelEvent        this.mousePosition = evt.xy.clone();        if (this.mouseDragStart != null) {            if (this.zoomBox) {                var deltaX = Math.abs(this.mouseDragStart.x - evt.xy.x);                var deltaY = Math.abs(this.mouseDragStart.y - evt.xy.y);                this.zoomBox.style.width = Math.max(1, deltaX) + "px";                this.zoomBox.style.height = Math.max(1, deltaY) + "px";                if (evt.xy.x < this.mouseDragStart.x) {                    this.zoomBox.style.left = evt.xy.x+"px";                }                if (evt.xy.y < this.mouseDragStart.y) {                    this.zoomBox.style.top = evt.xy.y+"px";                }            } else {                var deltaX = this.mouseDragStart.x - evt.xy.x;                var deltaY = this.mouseDragStart.y - evt.xy.y;                var size = this.map.getSize();                var newXY = new OpenLayers.Pixel(size.w / 2 + deltaX,                                                 size.h / 2 + deltaY);                var newCenter = this.map.getLonLatFromViewPortPx( newXY );                 this.map.setCenter(newCenter, null, true);                this.mouseDragStart = evt.xy.clone();                this.map.div.style.cursor = "move";            }            this.performedDrag = true;        }    },    /**     * Method: defaultMouseUp     *      * Parameters:     * evt - {<OpenLayers.Event>}      */    defaultMouseUp: function (evt) {        if (!OpenLayers.Event.isLeftClick(evt)) return;        if (this.zoomBox) {            this.zoomBoxEnd(evt);            } else {            if (this.performedDrag) {                this.map.setCenter(this.map.center);            }        }        document.onselectstart=null;        this.mouseDragStart = null;        this.map.div.style.cursor = "";    },    /**     * Method: defaultMouseOut     *      * Parameters:     * evt - {Event}      */    defaultMouseOut: function (evt) {        if (this.mouseDragStart != null &&             OpenLayers.Util.mouseLeft(evt, this.map.div)) {            if (this.zoomBox) {                this.removeZoomBox();            }            this.mouseDragStart = null;        }    },    /**      * Method: defaultWheelUp     * User spun scroll wheel up     *      */    defaultWheelUp: function(evt) {        if (this.map.getZoom() <= this.map.getNumZoomLevels()) {            this.map.setCenter(this.map.getLonLatFromPixel(evt.xy),                               this.map.getZoom() + 1);        }    },    /**     * Method: defaultWheelDown     * User spun scroll wheel down     */    defaultWheelDown: function(evt) {        if (this.map.getZoom() > 0) {            this.map.setCenter(this.map.getLonLatFromPixel(evt.xy),                               this.map.getZoom() - 1);        }    },    /**     * Method: zoomBoxEnd     * Zoombox function.      */    zoomBoxEnd: function(evt) {        if (this.mouseDragStart != null) {            if (Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 ||                    Math.abs(this.mouseDragStart.y - evt.xy.y) > 5) {                   var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart );                 var end = this.map.getLonLatFromViewPortPx( evt.xy );                var top = Math.max(start.lat, end.lat);                var bottom = Math.min(start.lat, end.lat);                var left = Math.min(start.lon, end.lon);                var right = Math.max(start.lon, end.lon);                var bounds = new OpenLayers.Bounds(left, bottom, right, top);                this.map.zoomToExtent(bounds);            } else {                var end = this.map.getLonLatFromViewPortPx( evt.xy );                this.map.setCenter(new OpenLayers.LonLat(                  (end.lon),                  (end.lat)                 ), this.map.getZoom() + 1);            }                this.removeZoomBox();       }    },    /**     * Method: removeZoomBox     * Remove the zoombox from the screen and nullify our reference to it.     */    removeZoomBox: function() {        this.map.viewPortDiv.removeChild(this.zoomBox);        this.zoomBox = null;    },/** *  Mouse ScrollWheel code thanks to http://adomas.org/javascript-mouse-wheel/ */    /**     * Method: onWheelEvent     * Catch the wheel event and handle it xbrowserly     *     * Parameters:      * e - {Event}      */    onWheelEvent: function(e){            // first determine whether or not the wheeling was inside the map        var inMap = false;        var elem = OpenLayers.Event.element(e);        while(elem != null) {            if (this.map && elem == this.map.div) {                inMap = true;                break;            }            elem = elem.parentNode;        }                if (inMap) {                        var delta = 0;            if (!e) {                e = window.event;            }            if (e.wheelDelta) {                delta = e.wheelDelta/120;                 if (window.opera) {                    delta = -delta;                }            } else if (e.detail) {                delta = -e.detail / 3;            }            if (delta) {                // add the mouse position to the event because mozilla has a bug                // with clientX and clientY (see https://bugzilla.mozilla.org/show_bug.cgi?id=352179)                // getLonLatFromViewPortPx(e) returns wrong values                e.xy = this.mousePosition;                if (delta < 0) {                   this.defaultWheelDown(e);                } else {                   this.defaultWheelUp(e);                }            }                        //only wheel the map, not the window            OpenLayers.Event.stop(e);        }    },    CLASS_NAME: "OpenLayers.Control.MouseDefaults"});

⌨️ 快捷键说明

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