タッチ イベントが発生した html 要素に対する相対位置を取得する際に問題があります。私は知っています、これはおそらく百万回尋ねられました。しかし、私はこれに何日も苦労しており、多くの解決策を見てきました。
奇妙なことに、私がテストしたすべてのデスクトップ ブラウザで動作しましたが、モバイル ブラウザでは動作しませんでした。
デスクトップでテストしました
- オペラ
- クロム
- ファイアフォックス
そしてモバイルで
- HTC One X (4.1) クローム
- Samsung Note 10.1 (4.1) ストック ブラウザ
- サムスン ノート 10.1 (4.1) クローム
- ネクサス 7 (4.2) クローム
これが私のコードのjsfiddleです。
問題は、イベントをキャプチャするキャンバスがスクロール領域内にある場合、モバイル ブラウザーでは要素のscrollTop
プロパティが設定され、デスクトップ ブラウザーでは適切な値が設定されることです。offsetParent
0
これは既知のバグですか?それとも私はここで何かを監督しましたか?さらに重要なことは、私の目標を達成するための回避策や別の方法はありますか?
これが私のコードです。相対位置を計算する方法は次のとおりです。
getRelativePosition: function (element, event ) {
var position = { x : event.pageX, y : event.pageY };
do {
this.log(element.offsetTop);
this.log(element.offsetHeight);
position.x -= element.offsetLeft;
position.y -= element.offsetTop;
position.x += element.scrollLeft;
position.y += element.scrollTop;
} while(element = element.offsetParent);
return position;
}