css - D3 svg css - 使用 css 围绕中心旋转线

标签 css d3.js svg

我这里有一个笨蛋 - https://plnkr.co/edit/E2SJlCo141NhYatVEFMU?p=preview

我有 3 个带有开始和结束位置的三个小节。

起点位置可以高于或低于终点。

我想在条上画箭头来说明开始是在结束之前还是之后。

我在条形图上绘制箭头并根据条形图是上升还是下降添加类。

然后我想使用 css 通过旋转箭头来设置箭头的方向。

一切正常,但箭头没有围绕其中心旋转,因此位于条形之外。

是否可以围绕其中心旋转箭头和线

.arrow-up{
  transform: rotate(180deg);
  transform-origin: center center;  
}

最佳答案

这看起来像是 SVG 中 transform-origin 支持的问题——“关键字和百分比指的是 Canvas 而不是对象本身”。查看Browser compatibility section here .该评论是针对 Firefox 列出的,但我也遇到了与 Chrome 相同的问题。

为了演示,我强制所有 3 个箭头都使用向上箭头类,您可以看到它们似乎围绕同一点旋转。

https://plnkr.co/edit/yQ4X18eb7VCItxXswMww?p=preview

因此,您可以直接在 SVG 线上使用旋转变换。以下 plunker 具有您需要的代码的开头,但您需要计算数据中心的 x 和 y 值。

https://plnkr.co/edit/JyT9ORnnMCETgpMyCjm1?p=preview

这是您需要的代码,但正如我所说,您需要将 100 100 替换为您的旋转中心 x 和 y 值。您也可以省去向上箭头和向下箭头类。

bar.enter()
    .append("line")
    .attr("x1", d => x(d.phase) + x.bandwidth()/2)  
    .attr("y1", (d, i) => {
      if(d.start < d.finish){
        return y(d.finish)+10;
      }else{
        return y(d.start)+10;
      }
    })  
    .attr("x2", d => x(d.phase) + x.bandwidth()/2)  
    .attr("y2", (d, i) => {
      if(d.finish < d.start){
        return y(d.finish)-15;
      }else{
        return y(d.start)-15;
      }
    })  
    .attr('class', (d, i) => {
      return d.start > d.finish ? 'arrow-up' : 'arrow-up'
    })
    .attr("stroke","red")  
    .attr("stroke-width",2)
    .attr("marker-end","url(#arrow)")
    .attr("transform", (d) => {
      console.log(d.start, d.finish)
      console.log(x(d.phase), x.bandwidth()/2)
      return `rotate(180 100 100)`
    })

关于css - D3 svg css - 使用 css 围绕中心旋转线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53186174/

相关文章:

html - header 在 IE 7-8 中乱七八糟

javascript - d3.js geoJSON 和边界

javascript - 使用 d3 中的箭头连接形状

reactjs - 使用 SVG 作为 React 组件,并将图像链接作为 prop?

internet-explorer - IE9、IE8、SVG、VML 和文档类型

html - 在CSS3的@page中动态设置样式

html - 为什么有时页面内的 css 不能正常工作,就像这种情况?

css - 如何在浏览器中查找css文件路径

javascript - d3.behavior.zoom 鼠标滚轮缩放中心动态偏移

html - 如何在 HTML 中使用 SVG 图标?