<div> <svg id="cirBox" height="300" width="300"> <circle cx="51" cy="75" r="30" fill="orange" stroke="red" stroke-opacity=".5" stroke-width="10" id="myCircle" onclick = "alternateColor()" /> </svg> <svg id="text" height="300" width="300" > <defs> <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%"> <stop class="c0" offset="0%"/> <stop class="c1" offset="100%"/> </linearGradient> <linearGradient id="myLinearGradient1" x1="0%" y1="0%" x2="0%" y2="100%" spreadMethod="pad"> <stop offset="0%" stop-color="#00cc00" stop-opacity="1"/> <stop offset="100%" stop-color="#006600" stop-opacity="1"/> </linearGradient> <path id="path2" d="m 63,258 c 0,0 -71,-217 171,-202 242,14 148,-45 148,-150" fill="none" stroke="black" /> </defs> <text y="72" fill="url(#grad1)" title="clicking the text will change it's style"> <textPath xlink:href="#path2"> Feb 25, 2013 </textPath> </text> <circle id="gradc" cx="200" cy="200" r="50" /> </svg> </div> <br> MAX_X:<span id="mx"></span><br> MAX_Y:<span id="my"></span><br> R:<span id="r"></span><br> X:<span id="x"></span><br> Y:<span id="y"></span><br> X Speed: <input id="xspeed" type="range" min=".1" max="10.0" step=".2" value="1"/><br> Y Speed: <input id="yspeed" type="range" min=".1" max="10.0" step=".2" value="1"/><br> <button onclick="moveCircle()">Move Circle</button> <button onclick="startAnim()">Animate Circle</button> <button onclick="stopAnim()">Stop Circle</button> <br><br><br>
//by Troy Whorten Feb 25, 2014 //color function by Jennifer Yu at Mix11 //gradient code from http://stackoverflow.com/questions/11303740/svg-linear-gradient-doesnt-work-in-safari and from http://tutorials.jenkov.com/svg/svg-gradients.html var colors = ["orange", "black", "yellow", "red", "blue", "fuchsia"]; var curColor = 0; function alternateColor() { var circle = document.getElementById("myCircle"); random = Math.floor(Math.random() * 100); curColor = (curColor + 1) % colors.length; stkColor = (curColor + random) % colors.length; circle.setAttribute("fill", colors[curColor]); circle.setAttribute("stroke", colors[stkColor]); } var xdir = 1; var ydir = 1; var xfac = Math.random(); var yfac = Math.random(); function moveCircle() { var circle = document.getElementById("myCircle"); var box = document.getElementById("cirBox"); var curx = Number(circle.getAttribute("cx")); var cury = Number(circle.getAttribute("cy")); var rad = Number(circle.getAttribute("r")) + Number(circle.getAttribute("stroke-width"))/2; var max_x = box.getAttribute("width"); var max_y = box.getAttribute("height"); var xspeed = document.getElementById("xspeed").value; var yspeed = document.getElementById("yspeed").value //if edge touches, change direction if((curx >= (max_x - rad)) || curx <= rad) { xdir = -xdir; xfac = Math.random()/2; } if((cury >= (max_y - rad)) || cury <= rad) { ydir = -ydir; yfac = Math.random()/2; } var newx = (curx) + (xdir*(1+xfac)*xspeed) var newy = (cury) + (ydir*(1+yfac)*yspeed) if (newx > (max_y - rad)) newx = max_y - rad; if (newy > (max_y - rad)) newy = max_y - rad; if (newx < (rad)) newx = rad; if (newy < (rad)) newy = rad; circle.setAttribute("cx",newx); circle.setAttribute("cy",newy); document.getElementById("x").innerHTML = (curx) + (xdir*(1+xfac)); document.getElementById("y").innerHTML = (cury) + (ydir*(1+yfac)); document.getElementById("my").innerHTML = max_x - rad; document.getElementById("mx").innerHTML = max_y - rad; document.getElementById("r").innerHTML = rad; } var myInterval = setInterval(function () {},10000); function startAnim() { clearInterval(myInterval); myInterval = setInterval(moveCircle,33); } function stopAnim() { clearInterval(myInterval); }
svg{ border-style: dotted; border-width: 1px; display:inline-block; } circle:active { fill: red; } svg text { fill: url(#grad1); font-size: 72px; font-family: "Comic Sans MS", cursive; stroke: purple; stroke-width:1.5px; } svg text:active { fill:url(#myLinearGradient1); } .c0 { stop-color: orange; stop-opacity:1; } .c1 { stop-color: red; stop-opacity:1; } #gradc { fill:url(#myLinearGradient1); } #gradc:hover { fill: url(#grad1); } }