Интересная тема, потому что AFAIK в настоящее время Firefox не поддерживает анимацию в SVG.
Поэтому я провел небольшое расследование и нашел рабочее решение. Протестировано в Firefox 3.6, IE7 с плагином Adobe, Opera 10.51, Safari 4.0.5, Chrome 5.0.
Фон области SVG не имеет прозрачности в IE7, Safari и Chrome ... Я мог бы попробовать с тегом object (не поддерживается IE, возможно, нужен некоторый условный HTML ...).
[РЕДАКТИРОВАТЬ] ОК, я изменил использование более стандартного объекта ( embed никогда не определялся в HTML ...) за исключением IE, где он не поддерживается плагином Adobe SVG. Последний позволяет добавить атрибут, чтобы иметь прозрачность объекта embed . Для браузеров на основе Webkit нет прозрачности: см. объект, встроенный в HTML: фон по умолчанию должен быть прозрачным ошибка.
HTML-код:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Animating SVG</title>
</head>
<body bgcolor="#CCAAFF" onload="RotateSVG()">
<!--[if !IE]> -->
<object id="gear" data="gear.svg" type="image/svg+xml"
width="500" height="500"
style="position: absolute; top: -250px; left: -250px;">
<!--<![endif]-->
<embed id="gear" src="gear.svg" type="image/svg+xml"
width="500" height="500" wmode="transparent"
style="position: absolute; top: -250px; left: -250px;"/>
<!--[if !IE]> -->
</object>
<!--<![endif]-->
<div onclick="RotateSVG()"
style="position: absolute; top: 250px; background-color: #ACF;">Start / Stop</p>
<script type="text/javascript">
var animator;
var angle = 0;
function RotateSVG()
{
if (animator != null)
{
// Just stop
clearInterval(animator);
animator = null;
return;
}
var svgTag = document.getElementById("gear");
var svgDoc = null;
try
{
// Most modern browsers understand this
svgDoc = svgTag.getSVGDocument();
}
catch (ex) {} // Ignore error
if (svgDoc == undefined)
{
svgDoc = svgTag.contentDocument; // For old Mozilla?
if (svgDoc == undefined)
{
alert("Cannot get SVG document");
return;
}
}
var gear = svgDoc.getElementById("gearG");
if (gear == null)
{
alert("Cannot find gearG group");
return;
}
animator = setInterval(
function ()
{
angle += 5;
gear.setAttribute("transform", "rotate(" + angle + " 250 250)");
}, 100);
}
</script>
</body>
</html>
Код SVG, который я использовал (важен только идентификатор, SVG из Mozilla SVG Project ):
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
baseProfile="full">
<!-- http://www.mozilla.org/projects/svg/ -->
<g id="gearG" fill-opacity="0.7" stroke="black" stroke-width="0.1cm">
<circle cx="6cm" cy="2cm" r="100" fill="red"
transform="translate(0,50)" />
<circle cx="6cm" cy="2cm" r="100" fill="blue"
transform="translate(70,150)" />
<circle cx="6cm" cy="2cm" r="100" fill="green"
transform="translate(-70,150)" />
</g>
</svg>