2012-07-19 70 views
4

我正在嘗試在使用Javascript的SVG元素上實現拖/移動作。我使用的事件處理程序,如這樣的:evt.offsetX在Safari上返回undefined

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 
     } 

請注意,我已經有代碼要麼鼠標按下或touchstart指向handleMouseDown,取決於它是否是觸摸設備或沒有。

在我的桌面上,該代碼在IE9,Google和Safari上運行良好。然而,在iPad上,在touchstart上,反饋顯示「未定義的未定義的mousedown」。如果我用.pageX和.pageY替換掉.offsetX和.offsetY,那麼我會得到實際的座標。所以看起來Safari Mobile不處理.offsetX和.offsetY,但它處理.pageX和.pageY。

我知道我可以使用源元素position.left屬性來計算pageX中的.offsetX,但如果可能,我想避免這種情況。所以我的問題是:我的代碼或方法有什麼問題,或者.offsetX沒有在Safari Mobile中處理。

任何幫助非常感謝!

+0

任何分辨率? – nycynik 2012-09-29 18:18:40

回答

0

您可以改爲使用clientXclientY

0

在使用jQuery的.on函數canvas元素綁定事件處理程序時遇到類似的問題(不知道原因)。

我使用addEventListener通過綁定事件處理程序來解決它。處理程序中的event對象具有使用適當值定義的offsetX和offsetY。

希望它有幫助...