紙が表示されている div に対して大きすぎる場合は、紙をドラッグ可能にしたいと思います。
論文の blank:pointerdown および pointerup イベントを試してみましたが、マウスの動きをたどることができませんでした。また、jqueryを介して紙の要素をドラッグ可能にしようとしましたが、何もうまくいかないようです...
これを行う方法はありますか?
紙が表示されている div に対して大きすぎる場合は、紙をドラッグ可能にしたいと思います。
論文の blank:pointerdown および pointerup イベントを試してみましたが、マウスの動きをたどることができませんでした。また、jqueryを介して紙の要素をドラッグ可能にしようとしましたが、何もうまくいかないようです...
これを行う方法はありますか?
これは、JointJS イベントとドキュメント イベントを組み合わせて実現できます。グラフ表示は次のようにカプセル化されますdiv
。
<div id='diagram'></div>
次に、JointJS のイベント ハンドラーを追加します。最初pointerdown
に、ドラッグの開始位置を格納するイベントを追加します。
paper.on('blank:pointerdown',
function(event, x, y) {
dragStartPosition = { x: x, y: y};
}
);
次に、位置を格納する変数を削除するときのドラッグの終了 (ポインタアップ) (進行中のアクティブなドラッグがあるかどうかのフラグとしても機能します):
paper.on('cell:pointerup blank:pointerup', function(cellView, x, y) {
delete dragStartPosition;
});
JointJS は「紙のポインタの移動」イベントを公開しないため、mousemove
ドキュメント イベントを使用する必要があります。たとえば、JQuery の場合:
$("#diagram")
.mousemove(function(event) {
if (dragStartPosition)
paper.translate(
event.offsetX - dragStartPosition.x,
event.offsetY - dragStartPosition.y);
});
ドラッグ開始座標と現在のポインター位置を取得し、呼び出しを使用して用紙の位置を更新しpaper.translate()
ます。
警告: ( を使用して) 用紙をスケーリングする場合paper.scale()
は、ドラッグの開始位置もスケーリングする必要があります。
var scale = V(paper.viewport).scale();
dragStartPosition = { x: x * scale.sx, y: y * scale.sy};
への呼び出しはpaper.translate()
、適切な位置に更新されます。
次のことをお勧めします。
blank:pointerdown event
紙のドラッグを開始する紙のハンドラーを登録します (mousemove
紙が「パン」状態であることを認識するためにハンドラーで使用するフラグを保存します)。<div>
を CSS でコンテナに入れoverflow: auto
ます。これ<div>
は、大きな紙への小さな窓になります。mousemove
ます (マウス カーソルが紙の領域を離れても、紙をドラッグしたい可能性が高いためですか?)。このハンドラーでは、コンテナーのscrollLeft
およびscrollTop
プロパティを設定し<div>
て、用紙を「パン」します。scrollLeft
およびscrollTop
プロパティを調整するには、イベント オブジェクトのclientX
およびプロパティを、以前にハンドラーclientY
に格納したものと同じプロパティと共に使用します。(つまり、最後の/blank:pointerdown
からのパンのオフセットを見つけるために必要です)。mousemove
blank:pointerdown