【问题标题】:changing the start point in svg circle更改 svg 圆中的起点
【发布时间】:2017-07-10 22:05:16
【问题描述】:

我想使用下面的 SVG,但填充从 3 点开始。 我希望填充从 12 点开始。 请就如何实现这一目标提出建议。

    <svg id="svg" width="200" height="200" viewPort="0 0 100 100" version="1.1"
xmlns="http://www.w3.org/2000/svg">
  <circle r="90" cx="100" cy="100" fill="transparent" stroke-dasharray="565.48"
  stroke-dashoffset="0"></circle>
   <text id="percentile" x="50%" y="50%" text-anchor="middle" stroke="#191919"
   stroke-width="1px" font-size="35" dy="0.3em">{{pct}}</text>
   <!--<text id="percentile" x="50%" y="50%" text-anchor="middle" stroke="#191919"
   stroke-width="1px" font-size="20" dy="-0.3em">Percentile</text>-->
  <circle id="bar" r="90" cx="100" cy="100" fill="transparent"
  stroke-dasharray="565.48" stroke-dashoffset="0"></circle>
</svg>

【问题讨论】:

  • 对圆应用旋转变换。
  • @Robert 旋转圆圈也会旋转文本......所以我不想旋转 SVG 圆圈
  • 我尝试旋转圆圈,圆圈内的文字也随之旋转
  • 你做错了。正如我在第一条评论中所说,将旋转变换应用于圆。如果您仍然卡住,请提出一个新问题来显示您的尝试。

标签: svg svg-animate


【解决方案1】:

我假设您使用图像来显示某种进展,即它从完全灰色开始,然后随着比例从 0 到 1(或 0% 到 100)从 3 点开始逐渐填充黄色%),图像显示了它在 50% 时的样子。您想将开始时间从 3 点改为 12 点。

更新:我在此处发布的原始解决方案建议您可以使用stroke-dashoffset 来解决此问题。但是,该解决方案是不正确的:它仅适用于圆圈的一小部分,一旦您尝试填充较大比例的圆圈,它就会崩溃。下面更新的解决方案显示了原始问题下方 cmets 中建议的实现。它涉及旋转圆圈。下面的演示代码还解决了您在 cmets 中对此解决方案表达的担忧之一,即演示代码显示,如果仅将旋转应用于圆,它不应影响放置在圆内的文本。

<svg id="svg" width="500" height="200">
  <g transform="">
    <circle r="90" cx="100" cy="100" fill="none" stroke="gray" stroke-width="20"></circle>
    <circle id="bar" r="90" cx="100" cy="100" fill="none" stroke="orange" stroke-width="20" stroke-dasharray="70.69 494.80" transform="rotate(0, 100, 100)"></circle>
    <text x="35" y="100" font-family="Verdana" font-size="15">Text inside circle</text>
  </g>
  <g transform="translate(250)">
    <circle r="90" cx="100" cy="100" fill="none" stroke="gray" stroke-width="20"></circle>
    <circle id="bar" r="90" cx="100" cy="100" fill="none" stroke="orange" stroke-width="20" stroke-dasharray="70.69 494.80" transform="rotate(-90, 100, 100)"></circle>
    <text x="35" y="100" font-family="Verdana" font-size="15">Text inside circle</text>
  </g>
</svg>

【讨论】:

  • 非常感谢@andrew...它帮助我理解了很多...请分享一些关于这方面的教程,这样我就可以了解更多关于公式和其他我们可以做的事情... :)
  • 我通过快速简单的 Google 搜索“svg tutorial”或“svg dasharray dashoffset tutorial”找到了以下教程。我敢肯定,还有更多的好人。一个名为"How to create a radial progress bar with SVG" 的教程处理了您的问题所解决的几乎完全相同的问题。 MDN,Mozilla 开发者网络,总是一个很好的信息来源,他们有a basic SVG tutorial,我相信这很好。
  • 另外两个关于动画线条绘制的教程(这是你试图用你的圆圈做的)是 herehere 但是,同样,可能还有更多像他们这样的好教程在那里。
  • 确保您在 iOS 设备和桌面设备上进行测试。根据规范w3.org/TR/SVG/shapes.html#CircleElement,一些从 0300 开始渲染圆圈,但一些 (ios) 设备从 1200 开始。解决方案:在路径中使用两个半圆弧而不是圆圈。
猜你喜欢
  • 2015-05-18
  • 1970-01-01
  • 2018-07-22
  • 2022-12-09
  • 2014-10-01
  • 1970-01-01
  • 2023-03-18
  • 2014-09-21
  • 2020-01-31
相关资源
最近更新 更多