For a different question I composed this answer, including this sample code.
In that code I use the mouse wheel to zoom in/out of an HTML5 Canvas. I found some code that normalizes speed differences between Chrome and Firefox. However, the zoom handling in Safari is much, much faster than in either of those.
Here's the code I currently have:
var handleScroll = function(e){
var delta = e.wheelDelta ? e.wheelDelta/40 : e.detail ? -e.detail/3 : 0;
if (delta) ...
return e.preventDefault() && false;
};
canvas.addEventListener('DOMMouseScroll',handleScroll,false); // For Firefox
canvas.addEventListener('mousewheel',handleScroll,false); // Everyone else
What code can I use to get the same 'delta' value for the same amount of mouse wheel rolling across Chrome v10/11, Firefox v4, Safari v5, Opera v11 and IE9?
This question is related, but has no good answer.
Edit: Further investigation shows that one scroll event 'up' is:
| evt.wheelDelta | evt.detail ------------------+----------------+------------ Safari v5/Win7 | 120 | 0 Safari v5/OS X | 120 | 0 Safari v7/OS X | 12 | 0 Chrome v11/Win7 | 120 | 0 Chrome v37/Win7 | 120 | 0 Chrome v11/OS X | 3 (!) | 0 (possibly wrong) Chrome v37/OS X | 120 | 0 IE9/Win7 | 120 | undefined Opera v11/OS X | 40 | -1 Opera v24/OS X | 120 | 0 Opera v11/Win7 | 120 | -3 Firefox v4/Win7 | undefined | -3 Firefox v4/OS X | undefined | -1 Firefox v30/OS X | undefined | -1
Further, using the MacBook trackpad on OS X gives different results even when moving slowly:
- On Safari and Chrome, the
wheelDelta
is a value of 3 instead of 120 for mouse wheel. - On Firefox the
detail
is usually2
, sometimes1
, but when scrolling very slowly NO EVENT HANDLER FIRES AT ALL.
So the question is:
What is the best way to differentiate this behavior (ideally without any user agent or OS sniffing)?
e.wheelDelta/120
? – Zaragoza-3
in Firefox and120
in all other browsers. The issue seems to be with OS X. You should try to get a confirmation from an OS X user (especially for Chrome). – ZaragozadeltaX
,deltaY
anddeltaZ
properties – Veiled