如何为 SVG 笔画设置动画以充当仪表?

Posted

技术标签:

【中文标题】如何为 SVG 笔画设置动画以充当仪表?【英文标题】:How do I animate SVG stroke to act as a gauge? 【发布时间】:2022-01-22 03:59:22 【问题描述】:

我已经设置了这个代码:

.gauge 
  stroke-dasharray: 1000;
  stroke-dashoffset: 500;
  animation: dash 5s linear alternate;


@keyframes dash 
  from 
    stroke-dashoffset: 0;
  
  to 
    stroke-dashoffset: 1000;
  
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="dist/style.css">
  <title>Gauge</title>
</head>
<body>
  <div class="gauge">
    <svg   fill="white" stroke="red" stroke- stroke-linecap="round">
      <circle cx="200" cy="200" r="100"/>
    </svg>
  </div>
</body>
</html>

我想做的就是把它变成这样的仪表(忘记颜色和全部):

我很难理解 dasharray 和 dashoffset 命令以便将其转换为我需要的...有人可以帮忙吗?

【问题讨论】:

路径(圆)的长度为 623.32。将此值用于 stroke-dasharray 和 stroke-dashoffset。此外,如果您的仪表有 100 个单位,为了知道 1 个单位的长度,您需要将 623.32 除以 100,即 2*Math.PI。另请阅读这篇文章:css-tricks.com/svg-line-animation-works 更简单,将pathLength 设置为100,无需计算。 ***.com/questions/47910146/… codepen.io/Paulie-D/pen/yLgzpXm 【参考方案1】:

动画stroke-dashoffsetstroke-dasharray 部分取决于用例。在这里,我发现 1) 使用 transform/rotate 旋转圆圈和 2) 为 stroke-dasharray 设置动画更容易。

先决条件是设置 pathLength 属性。将其设置为&lt;circle&gt; 将控制一个完整圆圈的长度。在这种情况下,它看起来或多或少像仪表是一个圆的 2/3。因此,整圈为 150 且 2/3 为 100 是有意义的。

现在可以通过stroke-dasharray 中的第一个值来控制仪表的长度。第二个值应该大于 100 -- 它是数组中行之间的空间长度。

.gauge 
  stroke-dasharray: 100 150;
  animation: dash 5s linear alternate;


@keyframes dash 
  from 
    stroke-dasharray: 100 150;
  
  to 
    stroke-dasharray: 0 150;
  
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="dist/style.css">
  <title>Gauge</title>
</head>
<body>
  <div class="gauge">
    <svg   fill="white" stroke="red" stroke- stroke-linecap="round">
      <circle transform="rotate(150 200 200)" cx="200" cy="200" r="100" pathLength="150"/>
    </svg>
  </div>
</body>

</html>

【讨论】:

以上是关于如何为 SVG 笔画设置动画以充当仪表?的主要内容,如果未能解决你的问题,请参考以下文章

笔画动画,如何为出现的笔画附加另一条路径?

我如何为固定数据表组件的单元格设置动画?

如何为矩形的对角线设置动画?

如何为绘图效果设置动画? (最好只有 css3)

如何为 CAShapeLayer 路径和填充颜色设置动画

如何使用 SVG 为网页上的手写文本设置动画?