Pour une autre question , j'ai composé cette réponse, y compris cet exemple de code.
Dans ce code j'utilise la molette de la souris pour effectuer un zoom in/out d'un HTML5 Canvas. J'ai trouvé un code qui normalise les différences de vitesse entre Chrome et Firefox. Cependant, le zoom de la manipulation dans Safari est beaucoup, beaucoup plus vite que dans l'un de ces.
Voici le code que j'ai actuellement:
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
Quel code dois-je utiliser pour obtenir le même "delta" de la valeur pour le même montant de la molette de la souris à rouler dans de Chrome v10/11, Firefox v4, Safari v5, Opéra v11 et IE9?
Cette question est liée, mais n'a pas de bonne réponse.
Edit: complément d'enquête montre qu'un événement scroll " up " est:
| evt.wheelDelta | evt.détail ------------------+----------------+------------ 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 (éventuellement mal) Chrome v37/OS X | 120 | 0 IE9/Win7 | 120 | undefined Opéra v11/OS X | 40 | -1 Opéra v24/OS X | 120 | 0 Opéra v11/Win7 | 120 | -3 Firefox v4/Win7 | indéfini | -3 Firefox v4/OS X | indéfini | -1 Firefox v30/OS X | indéfini | -1
En outre, en utilisant le trackpad de MacBook OS X donne des résultats différents en même lorsque vous vous déplacez lentement:
- Sur Safari et Chrome, l'
wheelDelta
est une valeur de 3 au lieu de 120 pour la molette de la souris. - Sur Firefox, l'
detail
est habituellement2
, parfois,1
, mais lorsque le défilement très lentement, PAS de GESTIONNAIRE d'ÉVÉNEMENTS, les FEUX À TOUS.
La question est donc:
Quel est le meilleur moyen de différencier ce comportement (idéalement sans n'importe quel utilisateur de l'agent ou de l'OS sniffing)?