Improve analog mouse wheel detection and normalize event.wheelDelta for Safari
This commit is contained in:
@@ -55,12 +55,19 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
|||||||
*/
|
*/
|
||||||
cumulative: true,
|
cumulative: true,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: isAnalogScrollWheel
|
||||||
|
* {Boolean} Will switch to true when an event with analog scroll value
|
||||||
|
* is detected.
|
||||||
|
*/
|
||||||
|
isAnalogScrollWheel: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property: analogWheelPrecision
|
* Property: analogWheelPrecision
|
||||||
* {Integer} Adjust to get analog scroll wheel to feel right
|
* {Integer} Adjust to get analog scroll wheel to feel right
|
||||||
*/
|
*/
|
||||||
analogWheelPrecision: 360,
|
analogWheelPrecision: 360,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor: OpenLayers.Handler.MouseWheel
|
* Constructor: OpenLayers.Handler.MouseWheel
|
||||||
*
|
*
|
||||||
@@ -175,16 +182,24 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
|||||||
if (!e) {
|
if (!e) {
|
||||||
e = window.event;
|
e = window.event;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.wheelDelta) {
|
if (e.wheelDelta) {
|
||||||
delta = e.wheelDelta;
|
delta = e.wheelDelta;
|
||||||
if (delta % 120 === 0) {
|
|
||||||
delta = delta / 120;
|
if (OpenLayers.BROWSER_NAME === "safari" && !this.isAnalogScrollWheel) {
|
||||||
} else {
|
delta = delta * 10;
|
||||||
delta = delta / this.analogWheelPrecision;
|
} else if (window.opera && window.opera.version() < 9.2) {
|
||||||
}
|
|
||||||
if (window.opera && window.opera.version() < 9.2) {
|
|
||||||
delta = -delta;
|
delta = -delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.isAnalogScrollWheel = (this.isAnalogScrollWheel ||
|
||||||
|
delta % 40 !== 0 || Math.abs(delta) < 120);
|
||||||
|
|
||||||
|
if (this.isAnalogScrollWheel) {
|
||||||
|
delta = delta / this.analogWheelPrecision;
|
||||||
|
} else {
|
||||||
|
delta = Math.round(delta / 120);
|
||||||
|
}
|
||||||
} else if (e.detail) {
|
} else if (e.detail) {
|
||||||
delta = -e.detail / 3;
|
delta = -e.detail / 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,8 @@
|
|||||||
var activated = handler.activate();
|
var activated = handler.activate();
|
||||||
|
|
||||||
var delta = 120;
|
var delta = 120;
|
||||||
if (window.opera && window.opera.version() < 9.2) delta = -delta;
|
if (window.opera && window.opera.version() < 9.2) { delta = -delta; }
|
||||||
|
if (OpenLayers.BROWSER_NAME === "safari") delta = delta / 10;
|
||||||
handler.onWheelEvent({'target':map.layers[0].div, wheelDelta: delta});
|
handler.onWheelEvent({'target':map.layers[0].div, wheelDelta: delta});
|
||||||
handler.onWheelEvent({'target':map.layers[0].div, wheelDelta: delta});
|
handler.onWheelEvent({'target':map.layers[0].div, wheelDelta: delta});
|
||||||
t.delay_call(1, function() {
|
t.delay_call(1, function() {
|
||||||
|
|||||||
Reference in New Issue
Block a user