【问题标题】:SVG animation inside svg:use element. Works in Firefox, not in Chromesvg:use 元素内的 SVG 动画。适用于 Firefox,不适用于 Chrome
【发布时间】:2013-08-08 16:37:50
【问题描述】:

我正在使用 svg:use 元素将动画 SVG 微调器嵌入到具有许多节点的大型 D3.js 树中。

一个节点如下所示:

<g class="node clickable" data-path="1" data-depth="0" transform="">
  <text class="title" x="0" y=".36em" style="fill-opacity: 1;" text-anchor="begin">Model</text>
  <text class="subtitle" x="0" y="2em" style="fill-opacity: 1;" text-anchor="begin">
  <use href="static/spinner.svg#spinner" transform="translate(54.75,-9) rotate(0 7,9)">
</g>

我使用 JQuery 在需要时将微调器插入到树中众多 g.node 元素之一中。

spinner的SVG源码如下:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg id="spinner" version="1.1" xmlns="http://www.w3.org/2000/svg"
     width="16px" height="16px">
  <g>
    <line x1="50" y1="3.167" x2="50" y2="23.5" opacity="0.2">
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="0s" />
    </line>
        <line x1="80.102" y1="14.124" x2="67.033" y2="29.7" opacity="0.2">
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="0.1333s" />
    </line>    
        <line x1="96.121" y1="41.867" x2="76.096" y2="45.398" opacity="0.2">        
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="0.2666s" />
    </line>
    <line  x1="90.559" y1="73.415" x2="72.949" y2="63.249" opacity="0.2">
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="0.4s" />
    </line>     
        <line x1="66.018" y1="94.007" x2="59.064" y2="74.901" opacity="0.2">
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="0.5333s" />
    </line>
    <line x1="33.983" y1="94.007" x2="40.937" y2="74.901" opacity="0.2">
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="0.6666s" />
    </line>     
        <line x1="9.442" y1="73.417" x2="27.052" y2="63.25" opacity="0.2">
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="0.8s" />
    </line>    
    <line x1="3.879" y1="41.868" x2="23.904" y2="45.399" opacity="0.2">
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="0.9333s" />
    </line>    
    <line x1="19.897" y1="14.124" x2="32.966" y2="29.7" opacity="0.2">
      <animate attributeType="CSS" attributeName="opacity" from="1" to="0.1" dur="1.2s" repeatCount="indefinite" begin="1.0666s" />
    </line>
  </g>
</svg>

这在 Firefox 中完美运行,但在 Chrome 或 Safari 中却不行。在 Chrome 和 Safari 中,仅显示动画的第一个“帧”,但微调器没有动画。

有人知道如何解决这个问题吗?

谢谢!

【问题讨论】:

  • 您是否有机会发布完整的代码或指向 JSFiddle/bl.ocks.org 版本的链接?很难看出你的作品是如何组合在一起的。
  • 你试过设置你的attributeType="XML"
  • @MichaelMullany:我试过了,但没有任何区别。

标签: google-chrome svg d3.js svg-animate


【解决方案1】:

显然 Chrome 不会(自动)在嵌入的外部 SVG 文件中播放动画,但我刚刚发现当 use 元素引用的 SVG 不是从外部文件而是从文档中的某个位置加载时它会这样做。

临时解决办法如下:

http://bl.ocks.org/bertspaan/6182774

【讨论】:

猜你喜欢
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2014-03-29
  • 1970-01-01
相关资源
最近更新 更多