不需要的“边界”在用SVG / D3重叠的形状上
我遵循了本教程:展示SVG / D3的进度栏。
您在教程(至少在Chrome上)可以看到,此图像并非完全重叠,因此我们看到一个小边框。
这两个形状具有完全相同的坐标和大小。
我可以调整顶部的形状以使其尺寸稍大一些,但这很混乱,可能会在某些浏览器上看起来更大?是什么原因导致了这一点,是否有适当的修复?
作为参考,教程的代码:
var svg = d3.select('.progress')
.append('svg')
.attr('height', 100)
.attr('width', 500);
var states = ['started', 'inProgress', 'completed'],
segmentWidth = 100,
currentState = 'started';
var colorScale = d3.scale.ordinal()
.domain(states)
.range(['yellow', 'orange', 'green']);
svg.append('rect')
.attr('class', 'bg-rect')
.attr('rx', 10)
.attr('ry', 10)
.attr('fill', 'gray')
.attr('height', 15)
.attr('width', function(){
return segmentWidth * states.length;
})
.attr('x', 0);
var progress = svg.append('rect')
.attr('class', 'progress-rect')
.attr('fill', function(){
return colorScale(currentState);
})
.attr('height', 15)
.attr('width', 0)
.attr('rx', 10)
.attr('ry', 10)
.attr('x', 0);
progress.transition()
.duration(1000)
.attr('width', function(){
var index = states.indexOf(currentState);
return (index + 1) * segmentWidth;
});
function moveProgressBar(state){
progress.transition()
.duration(1000)
.attr('fill', function(){
return colorScale(state);
})
.attr('width', function(){
var index = states.indexOf(state);
return (index + 1) * segmentWidth;
});
}
.progressSelector{
margin-bottom: 30px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<select class="progressSelector" onchange="moveProgressBar(value)">
<option value="started" selected>Started</option>
<option value="inProgress">In Progress</option>
<option value="completed">Completed</option>
</select>
<div class="progress"></div>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请参阅此 - 但对于您的教程,有趣的是,它似乎只在灰色上发生黄色。
d3 解决问题的方法是设置:
在背景和前景上
rect
。这是一个工作示例:
See this post - but for your tutorial, interestingly, it only seems to happen with yellow on grey.
The d3 way to resolve the issue is to set:
On both the background and foreground
rect
.Here's a working example: