Merge pull request #500 from fredj/scrollable
Handler.MouseWheel: don't always block the handler
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user