【问题标题】:How to clip an SVG plot?如何剪辑 SVG 图?
【发布时间】:2016-05-09 08:56:30
【问题描述】:

我的 SVG 元素是这样设置的:

svg.attr("viewBox", "0 0 " + chartView.displayWidth + " " + chartView.displayHeight);

我在里面画了一些情节。有没有办法创建一个“透视窗口”,在里面我可以看到我的情节?

我尝试使用:

svg.append("clipPath").append("rect")
                    .attr("x", 10)
                     .attr("y", 10)
                    .attr("width", 50)
                   .attr("height", 100);

但它不起作用

【问题讨论】:

  • @RobertLongson 谢谢,实际上该怎么做?我可以设置一个 svg.attr 吗?
  • @RobertLongson 实际上它会是一个 rect 所以“clip-rect”?
  • @RobertLongson 查看我的编辑
  • 我认为“svg.append”表达了“在我想要剪辑的元素上设置剪辑路径”的意图。我错了吗?
  • 那么如何将 clipPath 设置为我的 svg?

标签: html css svg svg.js


【解决方案1】:

正如在 cmets 中已经提到的,您将使用 ClipPath。 您已经尝试使用append 创建一个。据我所知,这是D3.jsjQuery 语法。但是你标记了svg.js。 在 svg.js 中你会这样做:

svg.viewbox(0, 0, chartView.displayWidth, chartView.displayHeight);

var plot = svg.path('your plots path data').stroke('#000')

var clipper = svg.rect(50, 100).move(10, 10)

// to clip the whole svg use svg instead of plot
plot.clipWith(clipper)

如果你使用 D3.js,你就差不多了。 您已经创建了剪辑路径。你现在必须给它一个 id,并在你的情节中引用这个 id。

var clip = svg.append("clipPath").attr("id", "clipper");
clip.append("rect").attr("x", 10)
                   .attr("y", 10)
                   .attr("width", 50)
                   .attr("height", 100);

yourplot.attr("clip-path", "url(#clipper)")

如果你想用你的矩形剪辑整个 svg,请使用 svg.attr(...) 而不是 yourplot.attr(...)

请务必阅读 svg 规范或有关 clipPaths 的一些教程

【讨论】:

  • 参考我的问题,“yourPlot”应该是“svg”。不要忘记 JavaScript 答案中的分号。看起来很傻,但在 Javascript 中,缺少的分号是要调试的 PITA。好的,它有效.. 接受答案
  • 不一定。如果你想对每个单独的情节进行窗口化,你必须按照我写的那样做。您永远不应该在不说明您更改的内容和原因的情况下编辑答案。 svg.js 版本现在不适合 d3 版本。会相应地改变它
  • SVG 上有一个 viewBox,所以如果你在 <svg> 元素本身上放置一个 clipPath,你不太可能得到你期望的结果。
猜你喜欢
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2016-03-24
  • 1970-01-01
  • 2012-10-07
  • 2021-05-01
  • 1970-01-01
相关资源
最近更新 更多