以下のために別の質問私は構成この回答を含めて、このサンプルコード。
このコードでは、マウスホイールを使用して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でしょ?