| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | --- | 
					
						
							|  |  |  |  | id: 587d7fab367417b2b2512bd8 | 
					
						
							| 
									
										
										
										
											2021-03-04 09:49:46 -08:00
										 |  |  |  | title: 给 Circle 元素添加属性 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | challengeType: 6 | 
					
						
							| 
									
										
										
										
											2020-09-18 00:13:05 +08:00
										 |  |  |  | forumTopicId: 301471 | 
					
						
							| 
									
										
										
										
											2021-01-13 03:31:00 +01:00
										 |  |  |  | dashedName: add-attributes-to-the-circle-elements | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | --- | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | # --description--
 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-04 09:49:46 -08:00
										 |  |  |  | 上个挑战为 `dataset` 中的每个点都创建了 `circle` 元素,并将它们添加到 SVG 画布上。 但是 D3 需要更多关于位置和 `circle` 大小的信息来正确地显示它们。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-04 09:49:46 -08:00
										 |  |  |  | 在 SVG 中 `circle` 有三个主要的属性。 `cx` 和 `cy` 属性是坐标。 它们告诉 D3 将图形的*中心*放在 SVG 画布的何处。 半径( `r` 属性)给出 `circle` 的大小。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-04 09:49:46 -08:00
										 |  |  |  | 和 `rect` 的 `y` 坐标一样,`circle` 的 `cy` 属性是从 SVG 画布的顶端开始测量的,而不是从底端。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-04 09:49:46 -08:00
										 |  |  |  | 所有的属性都可以用回调函数来动态设值。 记住,所有串联在 `data(dataset)` 后面的方法会为 `dataset` 中的每个对象都运行一次。 回调函数中的 `d` 参数指在 `dataset` 中的当前对象,对每个点来说都是一个数组。 你可以使用方括号的方式,如 `d[0]`,来访问数组中的值。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | # --instructions--
 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 为 `circle` 元素添加 `cx`、`cy`、`r` 属性。 `cx` 的值应该是 `dataset` 中每个对象的数组的第一个数, `cy` 的值应该根据数组中的第二个值,但是要确保正向显示图表而不是倒转。 所有 circle 的 `r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | # --hints--
 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-04 09:49:46 -08:00
										 |  |  |  | 你应该有 10 个 `circle` 元素。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert($('circle').length == 10); | 
					
						
							|  |  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第一个 `circle` 元素的 `cx` 值应为 `34`,`cy` 值应为 `422`,`r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(0).attr('cx') == '34' && | 
					
						
							|  |  |  |  |     $('circle').eq(0).attr('cy') == '422' && | 
					
						
							|  |  |  |  |     $('circle').eq(0).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第二个 `circle` 元素的 `cx` 值应为 `109`,`cy` 值应为 `220`,`r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(1).attr('cx') == '109' && | 
					
						
							|  |  |  |  |     $('circle').eq(1).attr('cy') == '220' && | 
					
						
							|  |  |  |  |     $('circle').eq(1).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第三个 `circle` 元素的 `cx` 值应为 `310`,`cy` 值应为 `380`, `r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(2).attr('cx') == '310' && | 
					
						
							|  |  |  |  |     $('circle').eq(2).attr('cy') == '380' && | 
					
						
							|  |  |  |  |     $('circle').eq(2).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第四个 `circle` 元素的 `cx` 值应为 `79`,`cy` 值应为 `89`,`r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(3).attr('cx') == '79' && | 
					
						
							|  |  |  |  |     $('circle').eq(3).attr('cy') == '89' && | 
					
						
							|  |  |  |  |     $('circle').eq(3).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第五个 `circle` 元素的 `cx` 值应为 `420`,`cy` 值应为 `280`,`r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(4).attr('cx') == '420' && | 
					
						
							|  |  |  |  |     $('circle').eq(4).attr('cy') == '280' && | 
					
						
							|  |  |  |  |     $('circle').eq(4).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2020-09-18 00:13:05 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第六个 `circle` 元素的 `cx` 值应为 `233`,`cy` 值应为 `355`,`r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2020-09-18 00:13:05 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(5).attr('cx') == '233' && | 
					
						
							|  |  |  |  |     $('circle').eq(5).attr('cy') == '355' && | 
					
						
							|  |  |  |  |     $('circle').eq(5).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2020-09-18 00:13:05 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第七个 `circle` 元素的 `cx` 值应为 `333`,`cy` 值应为 `404`,`r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2020-09-18 00:13:05 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(6).attr('cx') == '333' && | 
					
						
							|  |  |  |  |     $('circle').eq(6).attr('cy') == '404' && | 
					
						
							|  |  |  |  |     $('circle').eq(6).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第八个 `circle` 元素的 `cx` 值应为 `222`,`cy` 值应为 `167`, `r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(7).attr('cx') == '222' && | 
					
						
							|  |  |  |  |     $('circle').eq(7).attr('cy') == '167' && | 
					
						
							|  |  |  |  |     $('circle').eq(7).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2020-09-18 00:13:05 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第九个 `circle` 元素的 `cx` 值应为 `78`,`cy` 值应为 `180`,`r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2020-09-18 00:13:05 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(8).attr('cx') == '78' && | 
					
						
							|  |  |  |  |     $('circle').eq(8).attr('cy') == '180' && | 
					
						
							|  |  |  |  |     $('circle').eq(8).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							| 
									
										
										
										
											2018-10-10 18:03:03 -04:00
										 |  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2020-08-13 17:24:35 +02:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:51:59 -07:00
										 |  |  |  | 第十个 `circle` 元素的 `cx` 值应为 `21`,`cy` 值应为 `377`,`r` 值应为 `5`。 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | ```js | 
					
						
							|  |  |  |  | assert( | 
					
						
							|  |  |  |  |   $('circle').eq(9).attr('cx') == '21' && | 
					
						
							|  |  |  |  |     $('circle').eq(9).attr('cy') == '377' && | 
					
						
							|  |  |  |  |     $('circle').eq(9).attr('r') == '5' | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-13 03:31:00 +01:00
										 |  |  |  | # --seed--
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ## --seed-contents--
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ```html | 
					
						
							|  |  |  |  | <body> | 
					
						
							|  |  |  |  |   <script> | 
					
						
							|  |  |  |  |     const dataset = [ | 
					
						
							|  |  |  |  |                   [ 34,    78 ], | 
					
						
							|  |  |  |  |                   [ 109,   280 ], | 
					
						
							|  |  |  |  |                   [ 310,   120 ], | 
					
						
							|  |  |  |  |                   [ 79,    411 ], | 
					
						
							|  |  |  |  |                   [ 420,   220 ], | 
					
						
							|  |  |  |  |                   [ 233,   145 ], | 
					
						
							|  |  |  |  |                   [ 333,   96 ], | 
					
						
							|  |  |  |  |                   [ 222,   333 ], | 
					
						
							|  |  |  |  |                   [ 78,    320 ], | 
					
						
							|  |  |  |  |                   [ 21,    123 ] | 
					
						
							|  |  |  |  |                 ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const w = 500; | 
					
						
							|  |  |  |  |     const h = 500; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const svg = d3.select("body") | 
					
						
							|  |  |  |  |                   .append("svg") | 
					
						
							|  |  |  |  |                   .attr("width", w) | 
					
						
							|  |  |  |  |                   .attr("height", h); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     svg.selectAll("circle") | 
					
						
							|  |  |  |  |        .data(dataset) | 
					
						
							|  |  |  |  |        .enter() | 
					
						
							|  |  |  |  |        .append("circle") | 
					
						
							|  |  |  |  |        // Add your code below this line | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |        // Add your code above this line | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   </script> | 
					
						
							|  |  |  |  | </body> | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 00:37:30 -07:00
										 |  |  |  | # --solutions--
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-13 03:31:00 +01:00
										 |  |  |  | ```html | 
					
						
							|  |  |  |  | <body> | 
					
						
							|  |  |  |  |   <script> | 
					
						
							|  |  |  |  |     const dataset = [ | 
					
						
							|  |  |  |  |                   [ 34,    78 ], | 
					
						
							|  |  |  |  |                   [ 109,   280 ], | 
					
						
							|  |  |  |  |                   [ 310,   120 ], | 
					
						
							|  |  |  |  |                   [ 79,    411 ], | 
					
						
							|  |  |  |  |                   [ 420,   220 ], | 
					
						
							|  |  |  |  |                   [ 233,   145 ], | 
					
						
							|  |  |  |  |                   [ 333,   96 ], | 
					
						
							|  |  |  |  |                   [ 222,   333 ], | 
					
						
							|  |  |  |  |                   [ 78,    320 ], | 
					
						
							|  |  |  |  |                   [ 21,    123 ] | 
					
						
							|  |  |  |  |                 ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const w = 500; | 
					
						
							|  |  |  |  |     const h = 500; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const svg = d3.select("body") | 
					
						
							|  |  |  |  |                   .append("svg") | 
					
						
							|  |  |  |  |                   .attr("width", w) | 
					
						
							|  |  |  |  |                   .attr("height", h); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     svg.selectAll("circle") | 
					
						
							|  |  |  |  |        .data(dataset) | 
					
						
							|  |  |  |  |        .enter() | 
					
						
							|  |  |  |  |        .append("circle") | 
					
						
							|  |  |  |  |        .attr("cx", (d) => d[0]) | 
					
						
							|  |  |  |  |        .attr("cy", (d) => h - d[1]) | 
					
						
							|  |  |  |  |        .attr("r", 5) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   </script> | 
					
						
							|  |  |  |  | </body> | 
					
						
							|  |  |  |  | ``` |