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

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
// its ancestors was:
// * specifically marked as scrollable
// * one of our layer divs
// * specifically marked as scrollable (CSS overflow property)
// * one of our layer divs or a div marked as scrollable
// ('olScrollable' CSS class)
// * the map div
//
var overScrollableDiv = false;
var overLayerDiv = false;
var allowScroll = false;
var overMapDiv = false;
var elem = OpenLayers.Event.element(e);
@@ -122,15 +123,18 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
}
}
if (!overLayerDiv) {
for(var i=0, len=this.map.layers.length; i<len; i++) {
// Are we in the layer div? Note that we have two cases
// here: one is to catch EventPane layers, which have a
// pane above the layer (layer.pane)
if (elem == this.map.layers[i].div
|| elem == this.map.layers[i].pane) {
overLayerDiv = true;
break;
if (!allowScroll) {
allowScroll = OpenLayers.Element.hasClass(elem, 'olScrollable');
if (!allowScroll) {
for (var i = 0, len = this.map.layers.length; i < len; i++) {
// Are we in the layer div? Note that we have two cases
// here: one is to catch EventPane layers, which have a
// pane above the layer (layer.pane)
var layer = this.map.layers[i];
if (elem == layer.div || elem == layer.pane) {
allowScroll = true;
break;
}
}
}
}
@@ -146,7 +150,7 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
//
// otherwise
//
// If we are over the layer div:
// If we are over the layer div or a 'olScrollable' div:
// * zoom/in out
// then
// * 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)
//
if (!overScrollableDiv && overMapDiv) {
if (overLayerDiv) {
if (allowScroll) {
var delta = 0;
if (!e) {
e = window.event;