将多边形转换为路径数据

Avatar of Chris Coyier
Chris Coyier

我最近几次不得不这样做,所以我想我会保存这个方法。StackOverflow 有一个非常有效的方法

[].forEach.call(polys,convertPolyToPath);

function convertPolyToPath(poly){
  var svgNS = poly.ownerSVGElement.namespaceURI;
  var path = document.createElementNS(svgNS,'path');
  var points = poly.getAttribute('points').split(/\s+|,/);
  var x0=points.shift(), y0=points.shift();
  var pathdata = 'M'+x0+','+y0+'L'+points.join(' ');
  if (poly.tagName=='polygon') pathdata+='z';
  path.setAttribute('id',poly.getAttribute('id'));
  path.setAttribute('fill',poly.getAttribute('fill'));
  path.setAttribute('stroke',poly.getAttribute('stroke'));
  path.setAttribute('d',pathdata);

  poly.parentNode.replaceChild(path,poly);
}

Michael Schofield 制作了一个 Pen 来快速完成它

查看 Pen 将 SVG 多边形转换为路径,作者是 Michael Schofield (@michaelschofield),在 CodePen 上。

您将自己的多边形放入上面的 SVG 中,然后它将在 DOM 中被路径替换。您可以通过 DevTools 检查来获取路径数据。

例如,目的是您尝试从具有直线的形状动画到具有曲线线的形状。SVG 软件工具会将前者输出为多边形,这是一种不同类型的数据,无法原生动画到路径语法。