開発者ブログ
リファレンス(仕様詳細) » イベントの正規化

イベントの正規化

Last modified by simdy on 2016/07/20, 11:27

hifiveでは、ブラウザによるイベントの非互換性を吸収するため、イベントの正規化を行います。現在のところ、以下の正規化を行っています。

イベントオブジェクトのoffsetX, offsetYプロパティ

  • Firefoxでは、イベントオブジェクトにoffsetX, offsetYプロパティがセットされません。
    hifiveは、これを自動的に補完します。
    • Firefoxでは通常、以下のようにoffsetX, offsetYプロパティを計算しています。
var offset = $(event.currentTarget).offset();  
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プロパティを計算しています。
var offset = $(event.currentTarget.farthestViewportElement).offset();  
event.offsetX = event.pageX - offset.left;  
event.offsetY = event.pageY - offset.top;  
  • Operaは、svg関連のoffsetも他の要素と同様に、currentTargetからのoffsetX, offsetYプロパティが格納されます。
    • 他のブラウザと同じoffsetの値を求めたい場合、上記のFirefoxと同じコードで計算できます。

マウスホイールのイベント名とホイール量

  • Firefoxでは、マウスホイールのイベント名はDOMMouseScrollで、その他のブラウザはmousewheelです。
  • hifiveでは、mousewheelのイベントハンドラが記述されると、Firefoxの場合DOMMouseScrollイベントにイベントハンドラを登録します。
    • 登録はDOMMouseScrollイベントに行うので、イベントオブジェクトのタイプはmousewheelではなく、DOMMouseScrollになります。
  • また、イベントオブジェクトのwheelDeltaプロパティを以下のようにします。
    すべてのブラウザに対応するためには、値の正負のみを使用し、数値は使用しないようにしてください。
    • IE, Chrome, Safari
      • ホイールを前に動かすと正の値(120)が、後ろに動かすと負の値(-120)が格納されます。
      • ホイールの1目盛りでスクロールする量を取得することはできません。
        コントロールパネル > マウス > ホイール でスクロールする量を変更しても、常に120, -120が格納されます。
    • Firefox, Opera
      • ホイールを前に動かすと正の値が、後ろに動かすと負の値が格納されます。
      • ホイールの1目盛りでスクロールする量を取得することができます。
        コントロールパネル > マウス > ホイール でスクロールする量を変更すると、常にスクロール量 * 40, スクロール量 * -40が格納されます。

Copyright (C) 2012-2016 NS Solutions Corporation, All Rights Reserved.