| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for
- * full list of contributors). Published under the Clear BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt 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>
- */
- 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 1 millisecond. In most cases
- * you won't want to change this value. For slow machines/devices
- * larger values can be tried out.
- */
- interval: 1,
-
- /**
- * 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
- * {OpenLayers.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 {<OpenLayers.Kinetic>}
- * constructor. Defaults to false.
- */
- enableKinetic: false,
- /**
- * 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 <panMap> and
- * <panMapDone> as callbacks.
- */
- draw: function() {
- if(this.enableKinetic) {
- 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 - {<OpenLayers.Pixel>} 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 <panMap>)
- * if the map has actually been moved.
- *
- * Parameters:
- * xy - {<OpenLayers.Pixel>} 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"
- });
|