mjs | ab2dceb | 2006-06-20 02:43:10 +0000 | [diff] [blame] | 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 | |