1

したがって、要素をマウスで移動させることはできますが、問題は、オフセットが要素の左上隅から計算され、要素内のマウスの位置が考慮されていないため、オブジェクトがマウスに向かって跳ね上がり、防止されることです。上または左にドラッグすることはできません。

だから私はこの関数を思いついた:

  handle.on("mousemove", function(e) {
    if (state.dragging) {
      var paneOffset = pane.offset();
      var mouseOffset = {
        'top': e.pageY - paneOffset.top,
        'left': e.pageX - paneOffset.left
      }
      pane.offset({
        top: e.pageY - mouseOffset.top,
        left: e.pageX - mouseOffset.left
      });
    }
  });

例: http: //jsfiddle.net/SEKxc/

これに伴う問題は、要素の同じ正確なオフセットを常に計算するため、要素の移動が停止することです。要素をマウスに追従させるにはどうすればよいですか。ただし、オブジェクトに対するマウスの位置を基準にします。

この機能が組み込まれているjQueryUIを知っていますが、使用したくありません。

4

2 に答える 2

1

dragstartで最初のmouseoffsetを計算できるため、mousemoveハンドラー内からグローバル変数として使用できます。マウスを動かす前にドラッグスタートが開始されるので、問題は発生しません。

更新:オブジェクトの初期オフセットとマウスの初期オフセットの両方を保存し、mouseMoveの元のオフセットと比較したマウスの相対オフセットを計算してから、同じ変換を要素に適用する必要があります。

于 2013-01-01T21:17:11.007 に答える
0

ドラッグを開始するときに、マウスの位置と要素の左上隅の間の距離を保存します。次に、マウスの位置からそれらを差し引くだけで、マウスが移動したときの要素の位置が計算されます。

于 2013-01-01T21:17:51.943 に答える