/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for * full list of contributors). Published under the 2-clause BSD license. * See license.txt in the OpenLayers distribution or repository for the * full text of the license. */ /** * @requires OpenLayers/Control.js * @requires OpenLayers/Handler/Drag.js */ /** * Class: OpenLayers.Control.DragPan * The DragPan control pans the map with a drag of the mouse. * * Inherits from: * - */ OpenLayers.Control.DragPan = OpenLayers.Class(OpenLayers.Control, { /** * Property: type * {OpenLayers.Control.TYPES} */ type: OpenLayers.Control.TYPE_TOOL, /** * Property: panned * {Boolean} The map moved. */ panned: false, /** * Property: interval * {Integer} The number of milliseconds that should ellapse before * panning the map again. Defaults to 0 milliseconds, which means that * no separate cycle is used for panning. In most cases you won't want * to change this value. For slow machines/devices larger values can be * tried out. */ interval: 0, /** * APIProperty: documentDrag * {Boolean} If set to true, mouse dragging will continue even if the * mouse cursor leaves the map viewport. Default is false. */ documentDrag: false, /** * Property: kinetic * {} The OpenLayers.Kinetic object. */ kinetic: null, /** * APIProperty: enableKinetic * {Boolean} Set this option to enable "kinetic dragging". Can be * set to true or to an object. If set to an object this * object will be passed to the {} * constructor. Defaults to true. * To get kinetic dragging, ensure that OpenLayers/Kinetic.js is * included in your build config. */ enableKinetic: true, /** * APIProperty: kineticInterval * {Integer} Interval in milliseconds between 2 steps in the "kinetic * scrolling". Applies only if enableKinetic is set. Defaults * to 10 milliseconds. */ kineticInterval: 10, /** * Method: draw * Creates a Drag handler, using and * as callbacks. */ draw: function() { if (this.enableKinetic && OpenLayers.Kinetic) { var config = {interval: this.kineticInterval}; if(typeof this.enableKinetic === "object") { config = OpenLayers.Util.extend(config, this.enableKinetic); } this.kinetic = new OpenLayers.Kinetic(config); } this.handler = new OpenLayers.Handler.Drag(this, { "move": this.panMap, "done": this.panMapDone, "down": this.panMapStart }, { interval: this.interval, documentDrag: this.documentDrag } ); }, /** * Method: panMapStart */ panMapStart: function() { if(this.kinetic) { this.kinetic.begin(); } }, /** * Method: panMap * * Parameters: * xy - {} Pixel of the mouse position */ panMap: function(xy) { if(this.kinetic) { this.kinetic.update(xy); } this.panned = true; this.map.pan( this.handler.last.x - xy.x, this.handler.last.y - xy.y, {dragging: true, animate: false} ); }, /** * Method: panMapDone * Finish the panning operation. Only call setCenter (through ) * if the map has actually been moved. * * Parameters: * xy - {} Pixel of the mouse position */ panMapDone: function(xy) { if(this.panned) { var res = null; if (this.kinetic) { res = this.kinetic.end(xy); } this.map.pan( this.handler.last.x - xy.x, this.handler.last.y - xy.y, {dragging: !!res, animate: false} ); if (res) { var self = this; this.kinetic.move(res, function(x, y, end) { self.map.pan(x, y, {dragging: !end, animate: false}); }); } this.panned = false; } }, CLASS_NAME: "OpenLayers.Control.DragPan" });