Firefox不会为SVG大小更改设置动画

时间:2016-02-26 16:41:59

标签: javascript css html5 firefox svg

我们已经实施了一个带有SVG插图的网页,该插图由Javascript代码操纵。它在所有主流浏览器中都有效。 CSS 过渡属性用于为状态之间的转换设置动画:

svg rect {
   transition: 0.6s ease;
}

适用于所有主流浏览器。但是,Firefox只会动画颜色变化,但不会改变SVG元素的大小和位置。

我在JS Fiddle中设置了一个最小的例子:https://jsfiddle.net/gvswzghf/。它会增大和缩小矩形并同时改变颜色。

这是Firefox的已知限制吗?或者如何解决这个问题?

HTML:

<div>
  <svg id="svg" viewBox="0 0 400 300">
    <rect x="50" y="200" width="300" height="100" fill="#000"></rect>
  </svg>
</div>
<p>
  <button id="bt-grow">Grow</button>
  <button id="bt-shrink">Shrink</button>
</p>

样式表:

svg rect {
  transition: 0.6s ease;
}

svg {
  margin: 0 auto;
}

p {
  text-align: center;
}

Javascript代码:

var rect = document.getElementById("svg").children[0];

document.getElementById("bt-grow").addEventListener("click", function () {
  rect.setAttribute("y", "0");
  rect.setAttribute("height", 300);
  rect.setAttribute("fill", "#090");
  return false;
});

document.getElementById("bt-shrink").addEventListener("click", function () {
  rect.setAttribute("y", "200");
  rect.setAttribute("height", 100);
  rect.setAttribute("fill", "#000");
  return false;
});

1 个答案:

答案 0 :(得分:1)

您不能使用CSS动画和SVG 1.1(Firefox实现的)动画属性,y和width是属性。在SVG 2中,它们是CSS属性。 Chrome(及其克隆Opera)是目前唯一实现SVG 2部分的UA。

对于Firefox支持,您必须使用SMIL。有polyfills可以向Chrome添加SMIL支持。