Changeset 2867
- Timestamp:
- 03/23/07 14:22:38 (2 years ago)
- Files:
-
- trunk/openlayers/lib/OpenLayers/Control/Navigation.js (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers/Events.js (modified) (8 diffs)
- trunk/openlayers/tests/test_Events.html (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openlayers/lib/OpenLayers/Control/Navigation.js
r2803 r2867 60 60 }, 61 61 62 wheelChange: function(evt, deltaZ) { 63 console.log("wheel " + deltaZ); 64 var newZoom = this.map.getZoom() + deltaZ; 65 if (!this.map.isValidZoomLevel(newZoom)) return; 66 67 var size = this.map.getSize(); 68 var deltaX = size.w/2 - evt.xy.x; 69 var deltaY = size.h/2 - evt.xy.y; 70 var newRes = map.baseLayer.resolutions[newZoom]; 71 var zoomPoint = this.map.getLonLatFromPixel(evt.xy); 72 var newCenter = new OpenLayers.LonLat( 73 zoomPoint.lon + deltaX * newRes, 74 zoomPoint.lat - deltaY * newRes ); 75 console.log(newCenter.toString()); 76 this.map.setCenter( newCenter, newZoom ); 77 }, 78 62 79 /** User spun scroll wheel up 63 80 * 64 81 */ 65 82 wheelUp: function(evt) { 66 this.map.setCenter(this.map.getLonLatFromPixel(evt.xy), 67 this.map.getZoom() + 1); 83 this.wheelChange(evt, 1); 68 84 }, 69 85 … … 72 88 */ 73 89 wheelDown: function(evt) { 74 this.map.setCenter(this.map.getLonLatFromPixel(evt.xy), 75 this.map.getZoom() - 1); 90 this.wheelChange(evt, -1); 76 91 }, 77 92 trunk/openlayers/lib/OpenLayers/Events.js
r2803 r2867 73 73 for (var i = 0; i < OpenLayers.Event.observers.length; i++) { 74 74 OpenLayers.Event.stopObserving.apply(this, OpenLayers.Event.observers[i]); 75 OpenLayers.Event.observers[i][0] = null;76 75 } 77 76 OpenLayers.Event.observers = false; … … 98 97 || element.detachEvent)) 99 98 name = 'keydown'; 99 100 // find entry in this.observers cache array and remove it 101 var observers = OpenLayers.Event.observers; 102 var entry = [element, name, observer, useCapture]; 103 for (var i = 0; i < observers.length; i++) { 104 var observer = observers[i]; 105 106 //compare all 4 elements of entry with observer 107 var sameEntry = true; 108 for (var j = 0; j < entry.length; j++) { 109 if (entry[j] != observer[j]) { 110 sameEntry = false; 111 break; 112 } 113 } 114 115 //if we've found it, remove it from the observers array 116 if (sameEntry) { 117 observers.splice(i--, 1); 118 break; 119 } 120 } 100 121 101 122 if (element && element.removeEventListener) { … … 115 136 } 116 137 117 118 119 138 /** 120 139 * @class … … 145 164 146 165 /** 166 * @type Function: bound event handler attached to elements 167 * @private 168 */ 169 eventHandler: null, 170 171 /** @type Boolean */ 172 fallThrough: null, 173 174 /** 147 175 * @constructor 148 176 * … … 161 189 this.listeners = new Object(); 162 190 191 // keep a bound copy of handleBrowserEvent() so that we can 192 // pass the same function to both Event.observe() and .stopObserving() 193 this.eventHandler = this.handleBrowserEvent.bindAsEventListener(this); 194 163 195 // if eventTypes is specified, create a listeners list for each 164 196 // custom application event. … … 174 206 175 207 /** 208 * 209 */ 210 destroy: function () { 211 if (this.element) { 212 this.detachFromElement(); 213 } 214 this.element = null; 215 216 this.listeners = null; 217 this.object = null; 218 this.eventTypes = null; 219 this.fallThrough = null; 220 this.eventHandler = null; 221 }, 222 223 /** 176 224 * @param {HTMLDOMElement} element a DOM element to attach browser events to 177 225 */ … … 186 234 187 235 // use Prototype to register the event cross-browser 188 OpenLayers.Event.observe(element, eventType, 189 this.handleBrowserEvent.bindAsEventListener(this)); 236 OpenLayers.Event.observe(element, eventType, this.eventHandler); 190 237 } 191 238 // disable dragstart in IE so that mousedown/move/up works normally 192 239 OpenLayers.Event.observe(element, "dragstart", OpenLayers.Event.stop); 240 }, 241 242 /** 243 * @private 244 */ 245 detachFromElement: function () { 246 for (var i = 0; i < this.BROWSER_EVENTS.length; i++) { 247 var eventType = this.BROWSER_EVENTS[i]; 248 249 OpenLayers.Event.stopObserving( 250 this.element, eventType, this.eventHandler); 251 } 252 253 // re-enable dragstart in IE 254 OpenLayers.Event.stopObserving( 255 this.element, "dragstart", OpenLayers.Event.stop); 193 256 }, 194 257 … … 228 291 } 229 292 }, 230 // TODO: get rid of this in 3.0 231 // Decide whether listeners should be called in the order they were 232 // registered or in reverse order. 293 294 /** 295 * TODO: get rid of this in 3.0 - Decide whether listeners should be 296 * called in the order they were registered or in reverse order. 297 * 298 * @param {String} type Name of the event to register 299 * @param {Object} obj The object to bind the context to for the callback#. 300 * If no object is specified, default is the Events's 301 * 'object' property. 302 * @param {Function} func The callback function. If no callback is 303 * specified, this function does nothing. 304 */ 233 305 registerPriority: function (type, obj, func) { 234 306 trunk/openlayers/tests/test_Events.html
r2541 r2867 202 202 t.eq(a, 5, "if Events has no object set and an event is registered also with no object, triggerEvent() calls it without trying to set the context to null"); 203 203 } 204 205 function test_05_Event_destroy (t) { 206 t.plan(2); 207 var start = OpenLayers.Event.observers.length; 208 var div = OpenLayers.Util.getElement('test'); 209 var obj = {}; 210 var events = new OpenLayers.Events(obj, div); 211 // +1 because of blocking dragstart in attachToElement() 212 t.eq(OpenLayers.Event.observers.length, 213 start + OpenLayers.Events.prototype.BROWSER_EVENTS.length + 1, 214 "construction increases the number of event observers"); 215 events = events.destroy(); 216 t.eq(OpenLayers.Event.observers.length, start, 217 "destruction restores the number of event observers"); 218 } 204 219 205 220 // --> … … 208 223 <body> 209 224 <div id="map" style="width: 1024px; height: 512px;"/> 225 <div id="test"></div> 210 226 </body> 211 227 </html>
