視覚化でd3(バージョン4)を使用しているときにエラーが発生しました。基本的にはドキュメントを視覚化するx軸のタイムラインです。私はすべてのズーム/ブラシイベントで呼び出される主な機能を持っています。これはデータをフィルタリングして更新し、d3 enter/update/exitを使用してSVG要素を更新します。後続のガベージ変換のためにd3 parseSvgにエラーがありますか?
d3をズーム/ブラッシングすると、クラッシュし、ループ内で次のエラーが表示されます。それはまたランダムに起こる。
node_modules\d3\build\node_modules\d3\build\d3.js:4250 Error: <g> attribute transform: Trailing garbage, "…41797761907139, 7.35527222388514…".
parseSvg @ node_modules\d3\build\node_modules\d3\build\d3.js:4250
(anonymous) @ node_modules\d3\build\node_modules\d3\build\d3.js:4299
(anonymous) @ node_modules\d3\build\node_modules\d3\build\d3.js:8324
tween @ node_modules\d3\build\node_modules\d3\build\d3.js:8363
start @ node_modules\d3\build\node_modules\d3\build\d3.js:8136
schedule @ node_modules\d3\build\node_modules\d3\build\d3.js:8085
timerFlush @ node_modules\d3\build\node_modules\d3\build\d3.js:4949
wake @ node_modules\d3\build\node_modules\d3\build\d3.js:4959
requestAnimationFrame (async)
sleep @ node_modules\d3\build\node_modules\d3\build\d3.js:4996
nap @ node_modules\d3\build\node_modules\d3\build\d3.js:4984
wake @ node_modules\d3\build\node_modules\d3\build\d3.js:4962
requestAnimationFrame (async)
....
requestAnimationFrame (async)
sleep @ node_modules\d3\build\node_modules\d3\build\d3.js:4996
nap @ node_modules\d3\build\node_modules\d3\build\d3.js:4984
wake @ node_modules\d3\build\node_modules\d3\build\d3.js:4962
node_modules\d3\build\node_modules\d3\build\d3.js:4251 Uncaught TypeError: Cannot read property 'matrix' of null
at parseSvg (node_modules\d3\build\node_modules\d3\build\d3.js:4251)
at node_modules\d3\build\node_modules\d3\build\d3.js:4299
at SVGGElement.<anonymous> (node_modules\d3\build\node_modules\d3\build\d3.js:8324)
at SVGGElement.tween (node_modules\d3\build\node_modules\d3\build\d3.js:8363)
at start (node_modules\d3\build\node_modules\d3\build\d3.js:8136)
at schedule (node_modules\d3\build\node_modules\d3\build\d3.js:8085)
at timerFlush (node_modules\d3\build\node_modules\d3\build\d3.js:4949)
at wake (node_modules\d3\build\node_modules\d3\build\d3.js:4959)
SVGの解析はエラーですか?
私はHTMLを調べて、parseSvg
エラーの原因がこのg
要素であることを確認しました。
<g transform="translate(7.441797761907139, 7.355272223885149e-40)" style="opacity: 1; fill: rgb(255, 127, 14);">
最後に不具合がありますか?
e-40
がtranslate()
に追加されたとき、これをテストしようとしましたが、実際にはparseSvg
でd3がクラッシュします。
実際には、私はすでに.toFixed
を使って、描画関数の小数点以下2桁に丸めています(これも試しましたMath.round()
)。それでも、まだ数字が表示されていません(2番目のスクリーンショットを参照)。
// ENTER
var contentEnter = dataJoin.enter()
.append("g")
.style("opacity", 0)
.attr("transform", function(d) {
return "translate(" + (+d.cx).toFixed(2) + "," + (+d.cy).toFixed(2) + ")";
});
それから/ブラッシングをズーミングする際の要素のcy
位置を変えることができることに気づきました。私はそれを更新するために.transition()
を使用しています。
contentEnter
.merge(dataJoin)
.transition()
.duration(circleTransitionDuration)
.style("opacity", 1)
.on("start", function repeat() {
d3.active(this).attr("transform", function(d) {
return "translate(" + (+d.cx).toFixed(2) + "," + (+d.cy).toFixed(2) + ")";
}).style("fill", function(d) {
return d.color;
}).transition();
});
circleTransitionDuration
現在は50msであり、データや図面を更新する10ミリ秒程度かかります。
何が起こっていますか?新しいズームイベントが作成され、データの更新とd3描画が行われます。その後、アニメーションは、トランジションが完了するまでフレームごとに更新されます。遷移が完了する前に、新しいズーム/ブラシイベントが作成され、不完全なSVGが解析されるようです。
Google Chrome Profilerでイベントをログに記録しようとしました。エラーがスローされる直前に、Animation Frame Fired
が同じFrame
で呼び出されます。
だけ
71005ms
D3がクラッシュした時と最後のAnimation Frame Fired
後
、永遠にエラーを表示し続けます。
エラーの原因と解決方法を教えてもらえますか?
エラーがスローされたときに「不完全なSVG」はありません。 [parseSvg](https://github.com/d3/d3-interpolate/blob/master/src/transform/parse.js)関数を見てください:ダミー要素を作成し、 'transform'属性を設定して読み込みますさらなる解釈のための 'transform.baseVal'プロパティ属性が正しく設定されていないように見える場合、21行目でエラーが発生します。その属性の元はあなたが設定したものではなく、移行が進行中の間に補間された暫定値です。カスタムインターポレータを設定していないのですか? – ccprog
エラーをスローする変換属性は、HTMLに表示されるものではなく、潜在的な* next *値です。エラーメッセージが示す抜粋ではなく、開発者ツールの完全な属性文字列を取得する機会がありますか? – ccprog