イベントの正規化
hifiveでは、ブラウザによるイベントの非互換性を吸収するため、イベントの正規化を行います。現在のところ、以下の正規化を行っています。
イベントオブジェクトのoffsetX, offsetYプロパティ
- Firefoxでは、イベントオブジェクトにoffsetX, offsetYプロパティがセットされません。
hifiveは、これを自動的に補完します。- Firefoxでは通常、以下のようにoffsetX, offsetYプロパティを計算しています。
event.offsetX = event.pageX - offset.left;
event.offsetY = event.pageY - offset.top;
currentTargetがsvgタグ、もしくはその(foreignobjectタグ内の要素を除く)子要素の場合
IE, Chrome, Safari
- 「その要素(currentTarget)」からのoffsetではなく、その要素を含むsvgエレメントからのoffsetになっています。
- またsvgタグがネストしている場合、その要素を含む最も外側のsvgエレメントからのoffsetになっています。
Firefox
- offsetは計算されません。
Opera
- 「その要素(currentTarget)」からのoffsetになっています。
hifiveにおけるsvg関連のoffset
- Firefoxは、IE, Chrome, Safariと同じ仕様でoffsetを計算します。
- 具体的には以下のようにoffsetX, offsetYプロパティを計算しています。
event.offsetX = event.pageX - offset.left;
event.offsetY = event.pageY - offset.top;
- Operaは、svg関連のoffsetも他の要素と同様に、currentTargetからのoffsetX, offsetYプロパティが格納されます。
- 他のブラウザと同じoffsetの値を求めたい場合、上記のFirefoxと同じコードで計算できます。
マウスホイールのイベント名とホイール量
- Firefoxでは、マウスホイールのイベント名はDOMMouseScrollで、その他のブラウザはmousewheelです。
- HTML5(DOM Level3 Events)ではwheelがホイール操作に対応するイベントですが、以前はIE、Chromeではmousewheelイベントのみ実装されていました。
- hifiveでは、mousewheelのイベントハンドラが記述されると、Firefoxの場合DOMMouseScrollイベントにイベントハンドラを登録します。
- 登録はDOMMouseScrollイベントに行うので、イベントオブジェクトのタイプはmousewheelではなく、DOMMouseScrollになります。
- また、イベントオブジェクトのwheelDeltaプロパティを以下のようにします。
すべてのブラウザに対応するためには、値の正負のみを使用し、数値は使用しないようにしてください。- IE, Chrome, Safari
- ホイールを前に動かすと正の値(120)が、後ろに動かすと負の値(-120)が格納されます。
- ホイールの1目盛りでスクロールする量を取得することはできません。
コントロールパネル > マウス > ホイール でスクロールする量を変更しても、常に120, -120が格納されます。
- Firefox, Opera
- ホイールを前に動かすと正の値が、後ろに動かすと負の値が格納されます。
- ホイールの1目盛りでスクロールする量を取得することができます。
コントロールパネル > マウス > ホイール でスクロールする量を変更すると、常にスクロール量 * 40, スクロール量 * -40が格納されます。
- IE, Chrome, Safari