Javascript を使用して SVG 要素にドラッグ/移動アクションを実装しようとしています。次のようなイベント ハンドラを使用しています。
function handleMouseDown(evt) {
currentX = evt.offsetX;
currentY = evt.offsetY;
dX = currentX - Number($(evt.srcElement).attr("x"));
dY = currentY - Number($(evt.srcElement).attr("y"));
isDragging = true;
$info.html("mousedown at " + currentX + ", " + currentY); //feedback for debugging
}
タッチ デバイスかどうかに応じて、mousedown または touchstart のいずれかを handleMouseDown にポイントするコードが既にあることに注意してください。
私のデスクトップでは、コードは IE9、Google、および Safari で正常に動作します。ただし、iPad では、タッチスタート時に、フィードバックに「未定義、未定義でのマウスダウン」が表示されます。.offsetX と .offsetY を .pageX と .pageY に置き換えると、実際の座標が得られます。そのため、Safari Mobile は .offsetX と .offsetY を処理しないようですが、.pageX と .pageY を処理します。
ソース要素の position.left プロパティを使用して pageX から .offsetX を計算できることはわかっていますが、可能であればこれを避けたいと考えています。私の質問は次のとおりです。私のコードまたはアプローチに何か問題がありますか、それとも .offsetX が Safari Mobile で処理されませんか。
どんな助けでも大歓迎です!