作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取一个长度为 50 的数组,并在使用 d3 将数据绑定(bind)到这些圆圈时控制这些圆圈的附加方式。在我有 50 个圆圈的情况下,我想要 5 行和 10 列的圆圈。我能想到的最好的办法是这里的以下片段:
var margins = {top:20, bottom:300, left:30, right:100};
var height = 600;
var width = 900;
var totalWidth = width+margins.left+margins.right;
var totalHeight = height+margins.top+margins.bottom;
var svg = d3.select('body')
.append('svg')
.attr('width', totalWidth)
.attr('height', totalHeight);
var graphGroup = svg.append('g')
.attr('transform', "translate("+margins.left+","+margins.top+")");
var circData = new Array(50);
var rowMarker = 1;
graphGroup.selectAll('circle')
.data(circData)
.enter()
.append('circle')
.attr('cx', function(d,i) { return i*30})
.attr('cy', function(d,i) {
if (i%10) {
rowMarker += 1;
}
return rowMarker*30;
})
.attr('r', 10)
.style('fill', 'gray');
<script src="https://d3js.org/d3.v5.min.js"></script>
应该发生的是,每次函数前进十个元素时,rowMarker
都会达到一个新的整数增量,如索引 i
所测量的那样。然而,似乎正在发生的事情是圆圈被附加,使得它们的 y
属性值超过了如果 rowMarker
仅在每一行更新时人们期望的值。
有没有办法像我在上面尝试的那样,帮助我将圆圈映射到 5x10“圆矩阵”中的数据?如果是这样,需要什么逻辑?
最佳答案
你的代码的问题是这...
if (i%10)
...对于除第一个 i
值(即零)和 10 的倍数之外的所有内容都将为 true
。
但是,除此之外,您的方法似乎不必要地复杂。您可以简单地设置最大列数...
var maxColumn = 10;
... 然后对 x
和 y
值使用模运算符:
.attr('cx', function(d, i) {
return (i % maxColumn) * 30
})
.attr('cy', function(d, i) {
return (~~(i / maxColumn) % maxColumn) * 30
})
这里是你的代码有那个变化:
var margins = {
top: 20,
bottom: 300,
left: 30,
right: 100
};
var height = 600;
var width = 900;
var totalWidth = width + margins.left + margins.right;
var totalHeight = height + margins.top + margins.bottom;
var svg = d3.select('body')
.append('svg')
.attr('width', totalWidth)
.attr('height', totalHeight);
var graphGroup = svg.append('g')
.attr('transform', "translate(" + margins.left + "," + margins.top + ")");
var circData = new Array(50);
var maxColumn = 10;
graphGroup.selectAll('circle')
.data(circData)
.enter()
.append('circle')
.attr('cx', function(d, i) {
return (i % maxColumn) * 30
})
.attr('cy', function(d, i) {
return (~~(i / maxColumn) % maxColumn) * 30
})
.attr('r', 10)
.style('fill', 'gray');
<script src="https://d3js.org/d3.v5.min.js"></script>
关于javascript - 将圆排列成行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55916135/
我有一个大的包含元素,里面有大约十个 DIV - 大多数平均宽度约为 300 像素,并且都设置为向左浮动。最终结果是一个小部件/网格类型的布局。但是,这种样式是专门为响应式设计而构建的 - 我们使用媒
我想通过 \n 拆分字符串并将包含特定标记的行放入数组中。 我有这个代码: char mydata[100] = "mary likes apples\njim likes playing\n
我是一名优秀的程序员,十分优秀!