我的基于 D3 的可视化生成了一个 HTML5 SVG 元素,其中包含动画 GIF。为简单起见,举这个例子:
<svg>
<image href="animated.gif"></image>
<svg>
在鼠标悬停时,我想通过在后面放置一个带有渐变渐变的圆圈来突出显示图像,以获得发光效果。由于 SVG 将元素相互叠加,因此输出必须如下所示:
<svg>
<circle class="gloweffect"></circle>
<image href="animated.gif"></image>
<svg>
浪费了两天后,我放弃了尝试使用 D3 的插入立即将圆形元素插入正确的位置。它只是没有用,特别是。因为可视化包含很多其他的东西,插入位置很难表达。
因此,我使用 D3 的 append 在末尾添加圆圈。然后我调用一个排序器,它从 SVG 中删除所有元素,对它们进行排序,并以正确的顺序重新附加它们:
<svg>
<image href="animated.gif"></image>
<circle class="gloweffect"></circle>
<svg>
--> remove everything
<svg>
<svg>
--> sort and reinsert
<svg>
<circle class="gloweffect"></circle>
<image href="animated.gif"></image>
<svg>
挑战来了:这在所有浏览器中都可以正常工作,除了......等待它...... IE9。(好吧,跛脚等等。)
一旦图像元素被移除,IE9 就会停止 GIF 动画并且不会重新启动或在重新插入时继续。图像只是卡在第一帧并保持不变。
所以我的问题:有没有办法让IE9在重新插入后继续动画?我发现了很多关于常规 img 元素的旧线程,尤其是。建议在延迟线程中重置图片,但它们似乎都不适用于 SVG 中的图像元素。
——弗洛里安