Merge pull request #500 from fredj/scrollable

Handler.MouseWheel: don't always block the handler
This commit is contained in:
Frédéric Junod
2012-05-31 02:08:23 -07:00
+18 -14
View File
@@ -93,12 +93,13 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
// Ride up the element's DOM hierarchy to determine if it or any of // Ride up the element's DOM hierarchy to determine if it or any of
// its ancestors was: // its ancestors was:
// * specifically marked as scrollable // * specifically marked as scrollable (CSS overflow property)
// * one of our layer divs // * one of our layer divs or a div marked as scrollable
// ('olScrollable' CSS class)
// * the map div // * the map div
// //
var overScrollableDiv = false; var overScrollableDiv = false;
var overLayerDiv = false; var allowScroll = false;
var overMapDiv = false; var overMapDiv = false;
var elem = OpenLayers.Event.element(e); var elem = OpenLayers.Event.element(e);
@@ -122,15 +123,18 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
} }
} }
if (!overLayerDiv) { if (!allowScroll) {
for(var i=0, len=this.map.layers.length; i<len; i++) { allowScroll = OpenLayers.Element.hasClass(elem, 'olScrollable');
// Are we in the layer div? Note that we have two cases if (!allowScroll) {
// here: one is to catch EventPane layers, which have a for (var i = 0, len = this.map.layers.length; i < len; i++) {
// pane above the layer (layer.pane) // Are we in the layer div? Note that we have two cases
if (elem == this.map.layers[i].div // here: one is to catch EventPane layers, which have a
|| elem == this.map.layers[i].pane) { // pane above the layer (layer.pane)
overLayerDiv = true; var layer = this.map.layers[i];
break; if (elem == layer.div || elem == layer.pane) {
allowScroll = true;
break;
}
} }
} }
} }
@@ -146,7 +150,7 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
// //
// otherwise // otherwise
// //
// If we are over the layer div: // If we are over the layer div or a 'olScrollable' div:
// * zoom/in out // * zoom/in out
// then // then
// * kill event (so as not to also scroll the page after zooming) // * kill event (so as not to also scroll the page after zooming)
@@ -157,7 +161,7 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
// layerswitcher or the pan/zoom control) // layerswitcher or the pan/zoom control)
// //
if (!overScrollableDiv && overMapDiv) { if (!overScrollableDiv && overMapDiv) {
if (overLayerDiv) { if (allowScroll) {
var delta = 0; var delta = 0;
if (!e) { if (!e) {
e = window.event; e = window.event;