mousewheel.js

来自「用来在地图上做操作GIS,在地图上做标记」· JavaScript 代码 · 共 169 行

JS
169
字号
/* 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/Handler.js * * Class: OpenLayers.Handler.MouseWheel * Handler for wheel up/down events. *  * Inherits from: *  - <OpenLayers.Handler> */OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {    /**      * Property: wheelListener      * {function}      */    wheelListener: null,    /**      * Property: mousePosition     * {<OpenLayers.Pixel>} mousePosition is necessary because     * evt.clientX/Y is buggy in Moz on wheel events, so we cache and use the     * value from the last mousemove.     */    mousePosition: null,    /**     * Constructor: OpenLayers.Handler.MouseWheel     *     * Parameters:     * control - {<OpenLayers.Control>}      * callbacks - {Object} An object containing a single function to be     *                          called when the drag operation is finished.     *                          The callback should expect to recieve a single     *                          argument, the point geometry.     * options - {Object}      */    initialize: function(control, callbacks, options) {        OpenLayers.Handler.prototype.initialize.apply(this, arguments);        this.wheelListener = OpenLayers.Function.bindAsEventListener(            this.onWheelEvent, this        );    },    /**     * Method: destroy     */        destroy: function() {        OpenLayers.Handler.prototype.destroy.apply(this, arguments);        this.wheelListener = 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 check keyboard modifiers        if (!this.checkModifiers(e)) return;        // 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                if (this.mousePosition) {                    e.xy = this.mousePosition;                }                 if (!e.xy) {                    // If the mouse hasn't moved over the map yet, then                    // we don't have a mouse position (in FF), so we just                    // act as if the mouse was at the center of the map.                    // Note that we can tell we are in the map -- and                     // this.map is ensured to be true above.                    e.xy = this.map.getPixelFromLonLat(this.map.getCenter());                }                if (delta < 0) {                   this.callback("down", [e, delta]);                } else {                   this.callback("up", [e, delta]);                }            }                        //only wheel the map, not the window            OpenLayers.Event.stop(e);        }    },    /**     * Method: mousemove     * Update the stored mousePosition on every move.     *      * Parameters:     * evt - {Event} The browser event     *     * Returns:      * {Boolean} Allow event propagation     */    mousemove: function (evt) {        this.mousePosition = evt.xy;    },    /**     * Method: activate      */    activate: function (evt) {        if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) {            //register mousewheel events specifically on the window and document            var wheelListener = this.wheelListener;            OpenLayers.Event.observe(window, "DOMMouseScroll", wheelListener);            OpenLayers.Event.observe(window, "mousewheel", wheelListener);            OpenLayers.Event.observe(document, "mousewheel", wheelListener);            return true;        } else {            return false;        }    },    /**     * Method: deactivate      */    deactivate: function (evt) {        if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) {            // unregister mousewheel events specifically on the window and document            var wheelListener = this.wheelListener;            OpenLayers.Event.stopObserving(window, "DOMMouseScroll", wheelListener);            OpenLayers.Event.stopObserving(window, "mousewheel", wheelListener);            OpenLayers.Event.stopObserving(document, "mousewheel", wheelListener);            return true;        } else {            return false;        }    },    CLASS_NAME: "OpenLayers.Handler.MouseWheel"});

⌨️ 快捷键说明

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