| <svg width="100%" height="100%" preserveAspectRatio="none" viewBox="0 200 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg"> |
| <title>Suzanne's Hearts V1.0</title><desc>Author: http://richard.warburton.it - Licence: http://creativecommons.org/licenses/publicdomain</desc> |
| <rect x="-200" y="0" width="600" height="600" fill="black" /> |
| <path d="M0 0A10 10 0 1 1 17.0711 7.0711L0 24.142L-17.0711 7.0711A10 10 0 1 1 0 0" transform="translate(100,265) scale(4,5.2)" fill="#500" /> |
| <g id="hearts" style="text-anchor: middle;" font-family="sans-serif" font-size="4"> |
| <g font-size="20"> |
| <text x="100" y="280" fill="#ffffff">Richard</text> |
| <text x="100" y="300" fill="#ffffff">4</text> |
| <text x="100" y="320" fill="#ffffff">Suzanne</text> |
| </g> |
| </g> |
| <script type="text/ecmascript"><![CDATA[ |
| var hearts=new Array(8),r1=10,r2=25,fps=10; |
| |
| var messages=new Array( |
| new Array("I Love You"), |
| new Array("You Light Up","My Life"), |
| new Array("You Mean So","Much To Me"), |
| new Array("I Wouldn't Be","Without You"), |
| new Array("You Make Life","So Much Fun"), |
| new Array("You're So","Special"), |
| new Array("My Lady","In Red"), |
| new Array("Time Flies When","I'm With You"), |
| new Array("Richard","4","Suzanne"), |
| new Array("I Don't Know","What I'd Do","Without You"), |
| new Array("Never Want","This To End"), |
| new Array("My Soul Mate"), |
| new Array("You're","Everything","I Want"), |
| new Array("You're So","Beautiful"), |
| new Array("You're So","Smart"), |
| new Array("Being With You","Makes Me Want","You More"), |
| new Array("You're","Soooooo","Sexy"), |
| new Array("Meeting You Was","The Best Thing","That Happened","To Me"), |
| new Array("I Live For","Your Smile"), |
| new Array("A Dream","Come True") |
| ); |
| |
| for(x=0;x<hearts.length;x++) hearts[x] = new heart(); timer(); |
| function timer() { for(x=0;x<hearts.length;x++) hearts[x].move(); setTimeout("timer()",1000/fps); } |
| |
| function heart() { |
| this.svgHeart=document.createElementNS("http://www.w3.org/2000/svg","path"); |
| this.svgHeart.setAttributeNS(null,"d",'M0 0A10 10 0 1 1 17.0711 7.0711L0 24.142L-17.0711 7.0711A10 10 0 1 1 0 0'); |
| this.svgHeart.setAttributeNS(null,"transform",'scale(1,1.3)'); // Better shape for minor overhead |
| this.svgElement=document.createElementNS("http://www.w3.org/2000/svg","g"); |
| this.regenerate=heartRegenerate; |
| this.move=heartMove; |
| this.svgMessage=new Array(); |
| this.svgElement.appendChild(this.svgHeart); |
| this.regenerate(); |
| document.getElementById("hearts").appendChild(this.svgElement); |
| } |
| |
| function heartRegenerate() { |
| this.speedSize=Math.random()/20+0.03; |
| this.speedRotation=10*Math.random()-5; |
| this.currentRotation=0; |
| this.currentSize=0; |
| this.x=Math.floor(Math.random()*200); |
| this.y=Math.floor(Math.random()*200)+200; |
| var red=Math.floor(Math.random()*128+128); |
| this.svgElement.setAttributeNS(null,"fill","rgb("+red+","+Math.floor(Math.random()*red/4)+","+Math.floor(Math.random()*red/4)+")"); |
| if(this.svgMessage.length>0) { |
| for(var i=0;i<this.svgMessage.length;i++) |
| this.svgElement.removeChild(this.svgMessage[i]); |
| } |
| var text=messages[Math.floor(messages.length*Math.random())]; |
| this.svgMessage=new Array(text.length); |
| for(var i=0;i<text.length;i++) { |
| this.svgMessage[i]=document.createElementNS("http://www.w3.org/2000/svg","text"); |
| this.svgMessage[i].setAttributeNS(null,"y",11-4*(text.length/2-i)); |
| this.svgMessage[i].setAttributeNS(null,"fill","#ffffff"); |
| this.svgMessage[i].appendChild(document.createTextNode(text[i])); |
| this.svgElement.appendChild(this.svgMessage[i]); |
| } |
| } |
| |
| function heartMove() { |
| this.currentRotation+=this.speedRotation; |
| this.currentSize+=this.speedSize; |
| if(this.currentSize<0) this.regenerate(); |
| else if(this.currentSize>1.5) { |
| this.currentSize-=2*this.speedSize; |
| this.speedSize=-this.speedSize; |
| } |
| this.svgElement.setAttributeNS(null,"transform","translate("+this.x+","+this.y+") scale("+this.currentSize+") rotate("+this.currentRotation+")"); |
| } |
| ]]></script> |
| </svg> |