Internet Explorer:IE9およびIE10では、DOMからの水平方向のホイールスクロールを検出できるようにするために、onwheel
イベント(onmousewheelやDOMMouseScrollではない)を使用する必要があります。値とともに値addEventListener
を使用して、マウスの水平方向のホイールを検出します(垂直方向のホイールの場合は値を使用します)。<= IE8の場合は、イベントと(古いIEバージョンでサポートされているyaxisマウスホイールのみ)を使用します。event.deltaX
event.deltaMode
event.deltaY
onmousewheel
event.wheelDelta
Blink / Webkit:Chrome 31 /Safari7以降のオンホイールイベントのサポート。それ以外の場合は、onmousewheel
イベントevent.wheelDeltaX
とevent.wheelDeltaY
プロパティを使用します。Chrome / Safariのみのトリック:マウスホイールを左右にスクロールしながらShiftキーを使用する(テストに役立ちます)。
Firefox:Firefox17以降はonwheelイベントをサポートしています。古いバージョンのFirefox(3.6に戻る)をサポートするには、現在非推奨DOMMouseScroll
になっているプロパティとevent.axisプロパティおよびevent.detailプロパティを使用して、水平スクロールをサポートします。(Firefox mobile:ドキュメントは、タッチデバイスを使用してパンするとオンホイールイベントが発生することを示しています。私は試していません。)FirefoxにもMozMousePixelScroll
イベントがあります。MDNドキュメントには、ブラウザ間でさまざまなイベントを処理するための推奨コードも記載されています。Firefoxにはmousewheel.enable_pixel_scrolling構成もあり、これはすべての異なるホイールイベントに影響を与える可能性があります。
QuirksModeのホイールイベントテスターを使用して、オンホイールイベントを自分で試してみてください。Win7のIE9とWindows8のIE10(リリースプレビュー、IEバージョン10.0.8400.0)を使用してこれが機能していることを確認できました。新しい標準のオンホイールイベントを設定するには:
- addEventListener(キャプチャ)ラジオを選択します。
- スクロールのチェックを外します。
- マウスホイールのチェックを外します。
- ホイールにチェックマークを付けたままにします。
- 右の列の下部にある[イベントのプロパティを表示]にチェックマークを付けます。
- F12を使用して、ドキュメントがdocumentModeIE9標準またはIE10標準になっていることを確認します。
- 中央の列でマウスを動かして、ホイールイベントが左側の列に記録され、ホイールイベントの詳細が右側の列の下部に表示されることを確認します。
- イベントを取得するために、ホイールイベントチェックボックスのチェックを外して再度チェックする必要がある場合があります(理由はわかりません:quirksmodeページまたはIEのバグかもしれません)。
W3C仕様、イベントのMicrosoft IE9ドキュメント、MouseWheel
およびMDNドキュメントonwheel
では、イベントについて次のように指定しています。
deltaX
-マウスホイールがx軸(水平)を中心に回転した距離を取得します。
deltaY
-マウスホイールがy軸(垂直)を中心に回転した距離を取得します。
deltaZ
-マウスホイールがz軸を中心に回転した距離を取得します。
deltaMode
-デルタ値の測定単位を示す値を取得します。
DOM_DELTA_PIXEL
(0x00)デフォルト。デルタはピクセル単位で測定されます。
DOM_DELTA_LINE
(0x01)デルタはテキスト行で測定されます。
DOM_DELTA_PAGE
(0x02)デルタはテキストのページで測定されます。
編集:が設定されている場合は、イベントをpreventDefault()しないようにしevent.ctrlKey
てください。そうしないと、ページのズームができなくなる可能性があります。また、ChromeとIEのタッチパッドでピンチズームを使用すると、ctrlKeyがtrueに設定されているようです。
IEでは機能の検出が困難です。
- IE8 documentModeを使用するIE10では、
'onwheel' in document
trueを返しますが、水平または垂直のオンホイールイベントに対してイベントが発生しないようです。
- IE9では
'onwheel' in document
falseを返しますが、onwheelイベントは機能します(document.documentMode === 9
IE9でonwheelイベントを使用する前に確認する必要があると思います)。
- IE9およびIE10では、従来
document.onwheel = 'somefunc(event)'
はdocumentMode 9または10でも機能しないようです(つまり、addEventListenerしか使用できないようです)。
テストするには、Microsoftチルトホイールマウス、スクロールタッチパッド(ジェスチャまたはゾーン)、またはAppleデバイス(マジックマウスまたは強力なマウススクロールボール)を使用します。Windowsでさまざまなマウスまたはタッチパッドの設定を試してみてください(または、Safariを使用したOSXで水平スクロールをテストする場合はOSXのマウス設定)。
デルタ値の符号は、すべてのブラウザーでオンホイールとオンマウスホイールの符号が逆になっています。IEでは、デルタ値はオンホイールとオンマウスホイールで異なります。たとえば、(非常に標準的なMicrosoftマウスを搭載したIE9で開発マシンを使用して):
event.deltaY
onwheel
イベントを1ノッチ下にスクロールした場合、Win8では111、Win7では72でした。値はズームによってわずかに変化しますが、他にも解決できない要素があります(フォントサイズではないようです)。
event.wheelDelta
onmousewheel
1ノッチ下にスクロールするイベントの場合は-120でした。
Windows XPの場合、「WM_MOUSEHWHEEL
メッセージのサポートを追加して、その機能を実現する必要があります[、support]がVistaで追加されたため、XPを使用している場合は、IntelliTypeProまたはIntelliPoint、あるいはその両方をインストールする必要があります」-この記事のとおり。
- さまざまな一般的なタッチパッドおよびマウスドライバーは、ブラウザーのマウスホイールのサポートを無効にします。たとえば、ブラウザーの破損の検出や、WM_MOUSEWHEELおよびWM_MOUSEHWHEELメッセージの代わりにWM_HSCROLLおよびWM_VSCROLLメッセージを使用します。そのため、ドライバーはブラウザーでホイールイベントを生成しません(使用したブラウザーや使用したWindowsのバージョンに関係なく)。BugzillaでWM_VSCROLLを検索すると、 Firefoxだけでなくすべてのブラウザに影響を与える可能性のある問題が表示されます。