問題は、rect
要素自体とそれを囲むg
要素を変更していることです。rect
のサイズの設定と の位置の設定の間には、非常に短い遅延がありg
ます。これは、2 つの別々のコマンドで実行する必要があるためです。この遅延の間に、ドラッグ四角形に対するカーソル位置が変化drag
し、一貫性のない中間状態に対応する値で新しいイベントが発生します。これは直後に修正され (両方の要素の属性が調整されるとすぐに) drag
、不一致を修正する新しいイベントが発生しますが、ちらつきとして目立ちます。
これを修正する最も簡単な方法は、要素のサイズと位置の両方を変更し、要素rect
には何も変更しないことです。g
これは、ドラッグ長方形の位置も調整することを意味し、コードの見栄えが悪くなりますが、タイミング/不整合の問題は回避されます。
そうmyrect
なる
var myRect = d3.select(document.createElementNS("http://www.w3.org/2000/svg", "rect"))
.attr("data-ng-width", "{{square.w}}")
.attr("data-ng-height", "{{square.h}}")
.attr("stroke", "yellow")
.attr("stroke-width", 3)
.attr("fill-opacity", 0)
.attr("data-ng-x", "{{square.x}}")
.attr("data-ng-y", "{{square.y}}");
とresizer
var resizer = myGroup.append("rect")
.attr("width", 5)
.attr("height", 5)
.attr("stroke", "blue")
.attr("stroke-width", 1)
.attr("fill-opacity", 0)
.attr("cursor", "nw-resize")
.attr("x", "{{square.x-2.5}}")
.attr("y", "{{square.y-2.5}}")
.call(nresize);
こちらのソリューションでコードを更新しました。