<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3c.org/1999/xhtml"> <head> <title>Cursor-following canvas circles</title> <style type='text/css'> * { margin:0; padding:0; } canvas { position:absolute; top:50%; left:50%; margin-top:-200px; margin-left:-320px; border:1px solid #000; } </style> <script type='text/javascript'> function getwh() { if (self.innerHeight) { h=self.innerHeight w=self.innerWidth } else if (document.documentElement && document.documentElement.clientHeight) { h=document.documentElement.clientHeight w=document.documentElement.clientHeight } else if (document.body) { h=document.body.clientHeight w=document.body.clientWidth } } function ani() { var ctx = document.getElementById('canvas').getContext('2d'); ctx.clearRect(0,0,640,400); for (var i=0;i<num;i++) { ctx.beginPath(); ctx.arc(a[i],b[i],c[i],0,Math.PI*2,true); ctx.stroke(); nc=c[i]+Math.floor(Math.random()*3)-1 if (nc<minr) nc=minr else if (nc>maxr) nc=maxr c[i]=nc nb=Math.floor(Math.random()*(diff*2+1))-diff+y if (nb<c[i]) nb=c[i] else if (nb>400-c[i]) nb=400-c[i] b[i]=nb na=Math.floor(Math.random()*(diff*2+1))-diff+x if (na<c[i]) na=c[i] else if (na>640-c[i]) na=640-c[i] a[i]=na } setTimeout("ani()",40) } function load() { x=320 y=200 maxr=75 minr=25 diff=10 num=10 a=new Array() b=new Array() c=new Array() for (var i=0;i<num;i++) { c[i]=Math.floor(Math.random()*50)+25 b[i]=Math.floor(Math.random()*(400-c[i]*2))+c[i] a[i]=Math.floor(Math.random()*(640-c[i]*2))+c[i] } ani() } function mc(e) { getwh() x=Math.floor(e.pageX-(w-642)/2-2) y=Math.floor(e.pageY-(h-402)/2-2) } window.onload=load document.onmousemove=mc </script> </head> <body> <canvas id='canvas' width='640' height='400'></canvas> </body> </html>