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