あんパン

こしあん派

Android(Chrome)とiOS(Safari)でe.touchesの挙動が違う

touchstart等のtouchイベントの引数eにe.touchesが含まれていて、その中にタッチしている指の情報が順次入る。

  1. 指Aを押下
  2. 指Bを押下
  3. 指Aを離す
  4. 指Aを押下

以上の操作をするとiOSでは

  1. [指A]
  2. [指A, 指B]
  3. [指B]
  4. [指B, 指A]

と情報が入るのに対してAndroidは

  1. [指A]
  2. [指A, 指B]
  3. [指B]
  4. [指A, 指B]

と情報が入るので注意が必要。見分けるにはe.touches[n].identifierを使う。ちなみにこのidentifierも違っていて、Androidだと0, 1, 2...となるが、iOSだと256808260, 256808261...みたいな値が入る。

指の押下時にAndroidではidentifierを0から順に見て空いてる値があったらそれを割り当ててidentifier順でソートしていて、iOSはidentifierを最大の値+1で割り当ててidentifier順でソートしているみたい。