javascript - D3 缩放时保持线宽相同

标签 javascript d3.js

下面创建两条粗细为 8 的线:

var a = [23,50]
for (b = 0; b < a.length; b++) {
var stripe = vis.selectAll("line.stripep")
.data(connections.filter(function(d,i) { return i == a[b];  }))
.enter().append("svg:line")
  .attr("class", "stripe")
  .attr("stroke", function(d) { return "#000000"; })
  .attr("stroke-linecap", 'round')
  .style("stroke-width",  function(d) { return 8; } )
  .attr("x1", function(d) { return x(d.station1.longitude); })
  .attr("y1", function(d) { return y(d.station1.latitude); })
  .attr("x2", function(d) { return x(d.station2.longitude); })
  .attr("y2", function(d) { return y(d.station2.latitude); })


} 

我有以下缩放功能

function zoomed() {

vis.selectAll("line.route, line.stripe, line.stripep")
.attr("transform", "translate(" + zoom.translate() + ")scale(" + zoom.scale() + ")")
vis.selectAll("line.stripep")
.attr("stroke-width", 8 / (zoom.scale()))

但是线宽没有变化,这是什么问题。

我也试过:

vis.selectAll("line.stripep")
.style("stroke-width", 8 / (zoom.scale()))

最佳答案

这段CSS样式完美解决了问题:

.line {
    stroke-width: 2px; // desired stroke width (line height)
    vector-effect: non-scaling-stroke; // line height won't scale
}

无需额外的 JS 代码。

关于javascript - D3 缩放时保持线宽相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36885260/

相关文章:

javascript - 从同级框架中定位包含 iframe 的框架

javascript - CordovaApp - AngularJs - app.initialize() -> undefined 不是函数

javascript - 如何在 xcode 4.0.2 中调试 javascript?

javascript - 使用内联 IMG 在 TD 中居中文本

javascript - JS 生成的 SVG 不填充空间

javascript - 将 D3 力图转换为 v4

javascript - 将 d3.js Canvas 附加到 div

用于基于节点的对象和对象关系的 Javascript 库?

javascript - 将 D3 与多维数组/对象一起使用

javascript - d3.js:从时间尺度获取刻度格式