svg-repaint-foreignObject.svg   [plain text]


<svg xmlns="http://www.w3.org/2000/svg"
        xmlns:xlink="http://www.w3.org/1999/xlink"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
        
<script>
<![CDATA[
var stateIndex = 0;
var currentTarget = 0;

function stateA() 
{
    document.getElementById("A").textContent = '|A|';
    document.getElementById("B").textContent = 'B';

    currentTarget = 0;
    startAnimation();
}

function stateB() 
{
    document.getElementById("A").textContent = 'A';
    document.getElementById("B").textContent = '|B|';
    currentTarget = 1;
    startAnimation();
}

var intervalId = null;

function startAnimation() {
    if (intervalId == null) {
	intervalId = setInterval(animationStep, 20);
    }
}

function animationStep() {
    if (Math.abs(stateIndex - currentTarget) < .001) {
	clearInterval(intervalId);
	intervalId = null;
	return;
    }

    if (stateIndex < currentTarget) {
	stateIndex += 1 / 128;
    } else {
	stateIndex -= 1 / 128;
    }

    var elt = document.getElementById("targetGroup");

    var transform = "translate(" + (100 * stateIndex) + "," + (100 * stateIndex) + ") rotate(" + (405 * stateIndex) + ",100,250) scale(" + (1 +  stateIndex)  + ")" ;
    var opacity = 1 - .75 * stateIndex;

    elt.setAttribute("opacity", opacity);
    elt.setAttribute("transform", transform);
}


]]>
</script>

        <text id="A" x="0" y="32" fill="red" font-size="32" onclick="stateA()">|A|</text>
        <text id="B" x="60" y="32" fill="blue" font-size="32" onclick="stateB()">B</text>
        <text x="0" y="642" fill="black" font-size="32">Click B and then A above.</text>
        <text x="0" y="674" fill="black" font-size="32">The animation should have no trails or clipping.</text>

	<circle fill="pink" cx="300" cy="300" stroke="lightblue" stroke-width="40" r="300" />

        <g>
            <rect fill="yellow" stroke="#000000" stroke-width="2" x="60" y="60" width="170" height="170" />

	        <foreignObject  id="targetGroup" x="60" y="60" width="170" height="170" >
	            <xhtml:xhtml>
                        <xhtml:img src="http://www.citilink.com/~grizzly/anigifs/3dolph.gif" width="170" height="170" /><br />
	            </xhtml:xhtml>
                </foreignObject>
        </g>


</svg>