teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

余談を追加

2018/01/15 04:59

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -51,4 +51,134 @@
51
51
  ```
52
52
 
53
53
  ■参考情報
54
- [d3-drag#event_on](https://github.com/d3/d3-drag#event_on)
54
+ [d3-drag#event_on](https://github.com/d3/d3-drag#event_on)
55
+
56
+ --
57
+ 218/01/15コメント欄の要望を元に追加
58
+ ■案1)質問文に合わせた形に
59
+ ```HTML
60
+ <!DOCTYPE html>
61
+ <html lang="ja">
62
+ <head>
63
+ <meta charset="utf8">
64
+ <style>
65
+ #canvas {
66
+ background: #666;
67
+ }
68
+ </style>
69
+ <script src="http://d3js.org/d3.v3.min.js"></script>
70
+ <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
71
+ <script type="text/javascript">
72
+ $(function(){
73
+ var svg = d3.select("#svg");
74
+      // dragイベント
75
+ var drag = d3.behavior.drag()
76
+ .on("drag", function(d) {
77
+ d.x = d3.event.x;
78
+ d.y = d3.event.y;
79
+ d3.select(this).attr("x", d.x).attr("y", d.y);
80
+ });
81
+      // 矩形を表示する
82
+ var dataSet = [{x:100,y:100,w:100,h:100},{x:250,y:100,w:100,h:100}];
83
+ svg.append("g")
84
+ .append('rect')
85
+ .data([dataSet[0]])
86
+ .attr('x', function(d,i){
87
+ return d.x;
88
+ })
89
+ .attr('y', function(d,i){
90
+ return d.y;
91
+ })
92
+ .attr('width', function(d,i){
93
+ return d.w;
94
+ })
95
+ .attr('height', function(d,i){
96
+ return d.h;
97
+ })
98
+ .call(drag);
99
+
100
+      // もう一つ矩形を表示する
101
+ svg.append("g")
102
+ .append('rect')
103
+ .data([dataSet[1]])
104
+ .attr('x', function(d,i){
105
+ return d.x;
106
+ })
107
+ .attr('y', function(d,i){
108
+ return d.y;
109
+ })
110
+ .attr('width', function(d,i){
111
+ return d.w;
112
+ })
113
+ .attr('height', function(d,i){
114
+ return d.h;
115
+ })
116
+ .call(drag);
117
+ });
118
+ </script>
119
+ </head>
120
+ <body>
121
+ <svg id="svg" width="1000" height="1000"></svg>
122
+ </body>
123
+ </html>
124
+ ```
125
+ ■案2)関数化(drawRect)
126
+ ```HTML
127
+ <!DOCTYPE html>
128
+ <html lang="ja">
129
+ <head>
130
+ <meta charset="utf8">
131
+ <style>
132
+ #canvas {
133
+ background: #666;
134
+ }
135
+ </style>
136
+ <script src="http://d3js.org/d3.v3.min.js"></script>
137
+ <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
138
+ <script type="text/javascript">
139
+ $(function(){
140
+ var svg = d3.select("#svg");
141
+      // dragイベント
142
+ var drag = d3.behavior.drag()
143
+ .on("drag", function(d) {
144
+ d.x = d3.event.x;
145
+ d.y = d3.event.y;
146
+ d3.select(this).attr("x", d.x).attr("y", d.y);
147
+ });
148
+ function drawRect(dataSet, index){
149
+ svg.append("g")
150
+ .append('rect')
151
+ .data([dataSet[index]])
152
+ .attr('x', function(d,i){
153
+ return d.x;
154
+ })
155
+ .attr('y', function(d,i){
156
+ return d.y;
157
+ })
158
+ .attr('width', function(d,i){
159
+ return d.w;
160
+ })
161
+ .attr('height', function(d,i){
162
+ return d.h;
163
+ })
164
+ .call(drag);
165
+ }
166
+     
167
+ var dataSet = [{x:100,y:100,w:100,h:100},{x:250,y:100,w:100,h:100}];
168
+ // 矩形を表示する
169
+ drawRect(dataSet, 0);
170
+ // もう一つ矩形を表示する
171
+ drawRect(dataSet, 1);
172
+ });
173
+ </script>
174
+ </head>
175
+ <body>
176
+ <svg id="svg" width="1000" height="1000"></svg>
177
+ </body>
178
+ </html>
179
+ ```
180
+
181
+ ■余談
182
+ そもそも論ですが、質問文のコードを以下コードに変更すると分かるのですが、
183
+ 質問文のコードは2個描画していなく1個目の座標を2回描画しています。。
184
+ var dataSet = [{x:100,y:100,w:100,h:100},{x:250,y:100,w:100,h:100}];

3

behavior.dragのdragイベントより不要なパラメータを削除

2018/01/15 04:59

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -15,7 +15,7 @@
15
15
  var svg = d3.select("#svg");
16
16
       // dragイベント
17
17
  var drag = d3.behavior.drag()
18
- .on("drag", function(d,i) {
18
+ .on("drag", function(d) {
19
19
  d.x = d3.event.x;
20
20
  d.y = d3.event.y;
21
21
  d3.select(this).attr("x", d.x).attr("y", d.y);

2

参考情報を追加

2018/01/14 20:34

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -48,4 +48,7 @@
48
48
  <svg id="svg" width="1000" height="1000"></svg>
49
49
  </body>
50
50
  </html>
51
- ```
51
+ ```
52
+
53
+ ■参考情報
54
+ [d3-drag#event_on](https://github.com/d3/d3-drag#event_on)

1

サンプルデータを追加

2018/01/14 18:59

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -22,7 +22,7 @@
22
22
  });
23
23
 
24
24
       // 矩形を表示する
25
- var dataSet = [{x:100,y:100,w:100,h:100}, {x:250,y:100,w:100,h:100}];
25
+ var dataSet = [{x:100,y:100,w:100,h:100}, {x:100,y:100,w:100,h:100}, {x:250,y:100,w:100,h:100}];
26
26
  svg.selectAll("rects")
27
27
  .data(dataSet)
28
28
  .enter()