以下のために別の質問私は構成この回答を含めて、このサンプルコード。
このコードでは、マウスホイールを使用してHTML5キャンバスをズームイン/ズームアウトします。ChromeとFirefoxの速度の違いを正規化するコードを見つけました。ただし、Safariでのズーム処理は、どちらの場合よりもはるかに高速です。
これが私が現在持っているコードです:
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
Chrome v10 / 11、Firefox v4、Safari v5、Opera v11、IE9で同じ量のマウスホイールが回転するときに同じ「デルタ」値を取得するには、どのコードを使用できますか?
この質問は関連していますが、良い答えはありません。
編集:さらなる調査によると、1つのスクロールイベント「上」は次のとおりです。
| 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(おそらく間違っている) Chrome v37 / OS X | 120 | 0 IE9 / Win7 | 120 | 未定義 Opera v11 / OS X | 40 | -1 Opera v24 / OS X | 120 | 0 Opera v11 / Win7 | 120 | -3 Firefox v4 / Win7 | 未定義| -3 Firefox v4 / OS X | 未定義| -1 Firefox v30 / OS X | 未定義| -1
さらに、OS XでMacBookトラックパッドを使用すると、動きが遅い場合でも異なる結果が得られます。
- SafariとChromeでは、
wheelDelta
マウスホイールの値は120ではなく3です。 - Firefoxの場合
detail
は通常2
、時々1
ですが、非常にゆっくりとスクロールする場合、イベントハンドラーファイアはまったくありません。
だから問題は:
この動作を区別するための最良の方法は何ですか(理想的にはユーザーエージェントやOSスニッフィングなし)。
e.wheelDelta/120
でしょ?