Probably the easiest way to move an element in SVG using JavaScript is to change the element's transform attribute. This is not the best method in terms of performance, but it is very readable and simple.
The easiest way:
var el = document.getElementById( "mySVGElement" ); for( var i = 0; i < 100; i++ ) { setTimeout( function( ) { el.setAttribute( "transform", "translate( " + i + ", 0 )" ); }, 200 + i ); }
Or if you want the function to do this:
function translateElement( element, distance ) { var x, y; for( var i = 0; i < 100; i++ ) { setTimeout( function( ) { x = parseInt( distance.x * i / 100 ); y = parseInt( distance.y * i / 100 ); element.setAttribute( "transform", "translate( " + x + ", " + y + " )" ); }, 20 + i ); } }
or on Eric's advice:
function translateElement( element, distance ) { var x, y; for( var i = 0; i < 100; i++ ) { setTimeout( function( ) { x = distance.x * i / 100; y = distance.y * i / 100; element.transform.baseVal.getItem( 0 ).setTranslate( x, y ); }, 20 + i ); } }
Where the element is the element you are moving, and the distance is the shape object:
{ x: xOffset, y: yOffset }
source share