A bit more advanced example is shown below. The javascript is payload in the (green) CDATA section. The top element registers a number of listeners: onmousemove, onmousedown and onmouseup. The corresponding handlers can be found in the CDATA section. On startup the SVG will be an empty rectangle. First of all there is a state engine: state being kept in the variable 'up'. The value will be toggled by the functions registered by 'onmousedown' and 'onmouseup'. On mousemove the 'move' fuction will create a new circle, if the mouse is down. It is great to watch the DOM grow: this works well in in most browsers by right clicking and choosing 'Inspect element'.
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
onload="startup(evt)" onmousemove="move(evt)" onmousedown="msdn(evt)"
onmouseup="msup(evt)" >
<script><![CDATA[
var SVGDocument = null;
var SVGRoot = null;
var count=0;
var up=1;
var svgns = 'http://www.w3.org/2000/svg';
function startup(evt){
O=evt.target;
SVGDoc = O.ownerDocument;
SVGRoot = SVGDoc.documentElement;
}
function msdn(evt) {
up=0;
}
function msup(evt) {
up=1;
}
function move(evt){
if (up==0) {
N = SVGDoc.createElementNS(svgns,"circle");
N.setAttributeNS(svgns,"id", "P"+count);
N.setAttribute("cx", evt.clientX);
N.setAttribute("cy", evt.clientY);
N.setAttribute("r", 100);
N.setAttribute("opacity",.2);
N.setAttribute("fill", "rgb(255,"+(count++*3)%255+",0)");
SVGRoot.appendChild(N);
}
}
]]></script>
<rect id="P" x="0" y="0" width="100%" height="100%" fill="#333"/>
</svg>
It will show up like (click and move mouse):