我正在用 d3.js 创建一个华夫饼图,我想让它响应屏幕尺寸。我正在做的方式是每个矩形都有一个固定大小,我不知道如何更改大小以响应屏幕大小。
我已经用两个js文件试过了。一种用于桌面屏幕尺寸,另一种用于移动设备。但是,它不起作用,因为即使它们属于不同的文件,也检测到它们使用相同的变量。另一个问题是,如果我在第一个文件中选择 g 和/或 selectall .rect,机器会识别出我选择了 DOM 上的所有 g 和 .rect。
const width = 900;
const height = 500;
const numRows = 6;
let svg = d3.select('#waffle')
.append('svg')
.attr('width', width)
.attr('height', height)
.append('g');
// A failed attempt to make the chart responsive
let aspect = width / height,
chart = d3.select('#waffle');
d3.select(window)
.on("resize", function () {
var targetWidth = chart.node().getBoundingClientRect().width;
chart.attr("width", targetWidth);
chart.attr("height", targetWidth / aspect);
});
// load data
d3.csv('data/tracker.csv')
.then(data => {
drawWaffle(data);
})
// render the chart
function drawWaffle(data) {
plots = svg.selectAll('.rect')
.data(data)
.enter()
.append('rect')
.attr('width', 20)
.attr('height', 20)
.attr('x', (d, i) => {
let rowIndex = Math.floor(i / numRows)
return (rowIndex * 22)
})
.attr('y', (d, i) => {
let colIndex = i % numRows
return (colIndex * 22)
})
.attr('rx', (d, i) => {
return "10px"
})
.style('fill', camp_color)
.style('stroke', 'none')
.attr('transform', `translate(55, 21)`);
}
在桌面屏幕尺寸上没问题,但在移动设备上看起来很糟糕,因为矩形的尺寸是固定的。