1 <svg xmlns="http://www.w3.org/2000/svg" 2 xmlns:xlink="http://www.w3.org/1999/xlink" 3 xmlns:xhtml="http://www.w3.org/1999/xhtml"> 4 5 <script> 6 <![CDATA[ 7 var stateIndex = 0; 8 var currentTarget = 0; 9 10 function stateA() 11 { 12 document.getElementById("A").textContent = '|A|'; 13 document.getElementById("B").textContent = 'B'; 14 15 currentTarget = 0; 16 startAnimation(); 17 } 18 19 function stateB() 20 { 21 document.getElementById("A").textContent = 'A'; 22 document.getElementById("B").textContent = '|B|'; 23 currentTarget = 1; 24 startAnimation(); 25 } 26 27 var intervalId = null; 28 29 function startAnimation() { 30 if (intervalId == null) { 31 intervalId = setInterval(animationStep, 20); 32 } 33 } 34 35 function animationStep() { 36 if (Math.abs(stateIndex - currentTarget) < .001) { 37 clearInterval(intervalId); 38 intervalId = null; 39 return; 40 } 41 42 if (stateIndex < currentTarget) { 43 stateIndex += 1 / 128; 44 } else { 45 stateIndex -= 1 / 128; 46 } 47 48 var elt = document.getElementById("targetGroup"); 49 50 var transform = "translate(" + (100 * stateIndex) + "," + (100 * stateIndex) + ") rotate(" + (405 * stateIndex) + ",100,250) scale(" + (1 + stateIndex) + ")" ; 51 var opacity = 1 - .75 * stateIndex; 52 53 elt.setAttribute("opacity", opacity); 54 elt.setAttribute("transform", transform); 55 } 56 57 58 ]]> 59 </script> 60 61 <text id="A" x="0" y="32" fill="red" font-size="32" onclick="stateA()">|A|</text> 62 <text id="B" x="60" y="32" fill="blue" font-size="32" onclick="stateB()">B</text> 63 <text x="0" y="642" fill="black" font-size="32">Click B and then A above.</text> 64 <text x="0" y="674" fill="black" font-size="32">The animation should have no trails or clipping.</text> 65 66 <circle fill="pink" cx="300" cy="300" stroke="lightblue" stroke-width="40" r="300" /> 67 68 <g id="targetGroup"> 69 <rect fill="yellow" stroke="#000000" stroke-width="2" x="60" y="60" width="170" height="170" /> 70 71 <foreignObject x="60" y="60" width="170" height="170" > 72 <xhtml:xhtml> 73 <xhtml:img src="http://www.citilink.com/~grizzly/anigifs/3dolph.gif" width="170" height="170" /><br /> 74 </xhtml:xhtml> 75 </foreignObject> 76 </g> 77 78 79 </svg> 80 81 82