質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

524閲覧

d3.js ロード時のイベント取得について

canaria369

総合スコア25

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/09/19 12:14

d3.jsを使ってネットワークの描画をしたいと考えています。
描画の処理時間を計測するためにタイムスタンプを描画完了時のイベントにつけたいのですが
.on("load", function (d, i) { console.timeEnd('timer_'+t)});
をd3.json()にフックすると描画が行われません。

描画完了時のイベントの正しい取得方法をご存知の方、お教え願えないでしょうか

html

1<!DOCTYPE html> 2<meta charset="utf-8"> 3<style> 4 5.links line { 6 stroke: #999; 7 stroke-opacity: 0.6; 8} 9 10.nodes circle { 11 stroke: #fff; 12 stroke-width: 1.5px; 13} 14 15</style> 16<svg width="960" height="600"></svg> 17<script src="https://d3js.org/d3.v4.min.js"></script> 18<script> 19t=0; 20console.time('timer_'+t); 21 22var svg = d3.select("svg"), 23 width = +svg.attr("width"), 24 height = +svg.attr("height"); 25 26var color = d3.scaleOrdinal(d3.schemeCategory20); 27 28var simulation = d3.forceSimulation() 29 .force("link", d3.forceLink().id(function(d) { return d.id; })) 30 .force("charge", d3.forceManyBody()) 31 .force("center", d3.forceCenter(width / 2, height / 2)); 32 33d3.json("miserables.json", function(error, graph) { 34 if (error) throw error; 35 36 var link = svg.append("g") 37 .attr("class", "links") 38 .selectAll("line") 39 .data(graph.links) 40 .enter().append("line") 41 .attr("stroke-width", function(d) { return Math.sqrt(d.value); }); 42 43 var node = svg.append("g") 44 .attr("class", "nodes") 45 .selectAll("circle") 46 .data(graph.nodes) 47 .enter().append("circle") 48 .attr("r", 5) 49 .attr("fill", function(d) { return color(d.group); }) 50 .call(d3.drag() 51 .on("start", dragstarted) 52 .on("drag", dragged) 53 .on("end", dragended)); 54 55 node.append("title") 56 .text(function(d) { return d.id; }); 57 58 simulation 59 .nodes(graph.nodes) 60 .on("tick", ticked); 61 62 simulation.force("link") 63 .links(graph.links); 64 65 function ticked() { 66 link 67 .attr("x1", function(d) { return d.source.x; }) 68 .attr("y1", function(d) { return d.source.y; }) 69 .attr("x2", function(d) { return d.target.x; }) 70 .attr("y2", function(d) { return d.target.y; }); 71 72 node 73 .attr("cx", function(d) { return d.x; }) 74 .attr("cy", function(d) { return d.y; }); 75 } 76}).on("load", function (d, i) { console.timeEnd('timer_'+t)}); 77 78function dragstarted(d) { 79 if (!d3.event.active) simulation.alphaTarget(0.3).restart(); 80 d.fx = d.x; 81 d.fy = d.y; 82} 83 84function dragged(d) { 85 d.fx = d3.event.x; 86 d.fy = d3.event.y; 87} 88 89function dragended(d) { 90 if (!d3.event.active) simulation.alphaTarget(0); 91 d.fx = null; 92 d.fy = null; 93} 94 95</script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JavaScript

1 2 } 3 console.timeEnd('timer_'+t);// ここでは? 4});//.on("load", function (d, i) { console.timeEnd('timer_'+t)});

投稿2017/09/19 13:35

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

canaria369

2017/09/24 07:10

返信が遅くなり申し訳ありません。 回答ありがとうございます 上記で動作しました! function (d, i) { console.timeEnd('timer_'+t)}でtがスコープの違いで動いていないのか等いろいろ調べたのですが描画されない原因は結局わかりませんでした。 イベントでフックした時にできる処理とできない処理があるということなのでしょうか・・・
kei344

2017/09/24 07:25

特にd3に詳しくないのですが、d3.json().onでイベントが追加できる仕様なのでしょうか。追加できるとしてloadもイベントにあるのでしょうか。 回答は d3.json("miserables.json", function(error, graph) { /* この部分がjson読み込みのコールバック部分 */ }); なのでロードを別途採る事が必要ないということと、そのコールバック関数の最下部が「描画完了時」に相当するという2点です。 > スコープの違いで コメント冒頭に書きましたが、イベントそのものが起きていない可能性はありませんか?
canaria369

2017/10/01 07:18

返信ありがとうございます。 タイマーの変数部を抜いていれば完了したのでイベントは発生しているようです。 コールバック関数を引数に持つ関数にloadのイベントをつけると何か不具合があるのでしょうか? 色々試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問