d3过渡SVG多边形动画在Firefox中不流畅

时间:2019-01-22 02:45:42

标签: javascript firefox d3.js svg

我正在使用d3如下设置SVG多边形的动画...

https://jsfiddle.net/p6jy5t0n/35/

在Chrome / Safari上运行起来很流畅,但在Firefox上却很生涩-明星似乎甚至在改变位置方面都在跳舞。

有问题的代码仅依赖于链接d3的过渡来使恒星生长,然后通过增加其笔划宽度将其收缩回正常值...

d3.select(".svgStar").transition().duration(500).ease("easeElastic")
  .each("end",function(){
    d3.select(this).transition().duration(500).ease("easeElastic")
      .style("stroke-width","0.1px")
      .style("fill",starCol);
  })
  .style("stroke-width","2.5px")
  .style("fill","#fff400");

有什么想法可以使Firefox顺利过渡?

1 个答案:

答案 0 :(得分:0)

您尝试过D3v5吗?与D3v3相比,easyElastic在Chrome中的行为有所不同。

您知道easyElastic对过渡有什么作用吗?

尝试d3.easeLinear进行比较。

function transformStar(){
  var starCol = d3.select(".svgStar").style("fill");
  var starAnimationDuration = 500;

  d3.select(".svgStar").style("stroke","rgb(255, 218, 93)");

  d3.select(".svgStar")
    .transition().duration(starAnimationDuration).ease(d3.easeElastic)
      .style("stroke-width","2.5px")
      .style("fill","#fff400")
    .transition().duration(starAnimationDuration).ease(d3.easeElastic)
      .style("stroke-width","0.1px")
      .style("fill",starCol);
}
<script src="https://d3js.org/d3.v5.min.js" charset="utf-8"></script>
<div id="container">
  <svg>
    <g id="starG" style="transform:translateX(50px)">
      <polygon class="svgStar" fill="#ffda5d" stroke="none" w="9" cursor="default" points="94,20 101,43 125,43 106,58 113,80 94,66 74,80 80,58 62,43 86,43" style="transform: translate(-94px, 18px);">
      </polygon>
      <text x="0" y="74" id="starTxt" style="cursor: default; font-size: 12px; font-weight: bold; text-anchor: middle; fill: rgb(20, 171, 20); stroke-width: 0px;">
        Go!
      </text>
    </g>
  </svg>
</div>
<button onclick="transformStar();">
  Transform Star!
</button>