jquery制作 随机弹跳的小球特效
以下是源码:
<!doctypehtml> <html> <head> <title>HTML5随机弹跳的小球</title> <style> body{ font-family:微软雅黑; } body,h1{ margin:0; } canvas{ display:block;margin-left:auto;margin-right:auto; border:1pxsolid#DDD; background:-webkit-linear-gradient(top,#222,#111); } </style> </head> <body> <h1>HTML5特效随机弹跳的小球</h1> <div>请使用支持HTML5的浏览器开打本页。<buttonid="stop-keleyi-com">暂停</button> <buttonid="run-keleyi-com">继续</button> <buttonid="addBall-keleyi-com">增加小球</button><buttononclick="javascript:window.location.reload();">刷新</button> <br/>每次刷新页面的小球大小,颜色,运动路线,都是新的,可以点击上面各个按钮看看效果。 </div> <canvasid="canvas-keleyi-com"> </canvas> <scripttype="text/javascript"src="http://keleyi.com/keleyi/pmedia/jquery/jquery-1.11.0.min.js"></script> <scripttype="text/javascript"> varnimo={ aniamted:null, content:null, data:{ radiusRange:[5,20], speedRange:[-5,5], scrollHeight:null, scrollWdith:null }, balls:[], ele:{ canvas:null }, fn:{ creatRandom:function(startInt,endInt){//生产随机数 variResult; iResult=startInt+(Math.floor(Math.random()*(endInt-startInt+1))); returniResult }, init:function(){ nimo.data.scrollWdith=document.body.scrollWidth; nimo.data.scrollHeight=document.body.scrollHeight; nimo.ele.canvas=document.getElementById('canvas-ke'+'leyi-com'); nimo.content=nimo.ele.canvas.getContext('2d'); nimo.ele.canvas.width=nimo.data.scrollWdith-50; nimo.ele.canvas.height=nimo.data.scrollHeight-100; }, addBall:function(){ varaRandomColor=[]; aRandomColor.push(nimo.fn.creatRandom(0,255)); aRandomColor.push(nimo.fn.creatRandom(0,255)); aRandomColor.push(nimo.fn.creatRandom(0,255)); variRandomRadius=nimo.fn.creatRandom(nimo.data.radiusRange[0],nimo.data.radiusRange[1]); varoTempBall={ coordsX:nimo.fn.creatRandom(iRandomRadius,nimo.ele.canvas.width-iRandomRadius), coordsY:nimo.fn.creatRandom(iRandomRadius,nimo.ele.canvas.height-iRandomRadius), radius:iRandomRadius, bgColor:'rgba('+aRandomColor[0]+','+aRandomColor[1]+','+aRandomColor[2]+',0.5)' }; oTempBall.speedX=nimo.fn.creatRandom(nimo.data.speedRange[0],nimo.data.speedRange[1]); if(oTempBall.speedX===0){ oTempBall.speedX=1 } if(oTempBall.speedY===0){ oTempBall.speedY=1 } oTempBall.speedY=nimo.fn.creatRandom(nimo.data.speedRange[0],nimo.data.speedRange[1]); nimo.balls.push(oTempBall) }, drawBall:function(bStatic){ vari,iSize; nimo.content.clearRect(0,0,nimo.ele.canvas.width,nimo.ele.canvas.height) for(vari=0,iSize=nimo.balls.length;i<iSize;i++){ varoTarger=nimo.balls[i]; nimo.content.beginPath(); nimo.content.arc(oTarger.coordsX,oTarger.coordsY,oTarger.radius,0,10); nimo.content.fillStyle=oTarger.bgColor; nimo.content.fill(); if(!bStatic){ if(oTarger.coordsX+oTarger.radius>=nimo.ele.canvas.width){ oTarger.speedX=-(Math.abs(oTarger.speedX)) } if(oTarger.coordsX-oTarger.radius<=0){ oTarger.speedX=Math.abs(oTarger.speedX) } if(oTarger.coordsY-oTarger.radius<=0){ oTarger.speedY=Math.abs(oTarger.speedY) } if(oTarger.coordsY+oTarger.radius>=nimo.ele.canvas.height){ oTarger.speedY=-(Math.abs(oTarger.speedY)) } oTarger.coordsX=oTarger.coordsX+oTarger.speedX; oTarger.coordsY=oTarger.coordsY+oTarger.speedY; } } }, run:function(){ nimo.fn.drawBall(); nimo.aniamted=setTimeout(function(){ nimo.fn.drawBall(); nimo.aniamted=setTimeout(arguments.callee,10) },10) }, stop:function(){ clearTimeout(nimo.aniamted) } } } window.onload=function(){ nimo.fn.init(); vari; for(vari=0;i<10;i++){ nimo.fn.addBall(); } nimo.fn.run(); document.getElementById('stop-kel'+'eyi-com').onclick=function(){ nimo.fn.stop() } document.getElementById('run-keley'+'i-com').onclick=function(){ nimo.fn.stop() nimo.fn.run() } document.getElementById('addBall-k'+'eleyi-com').onclick=function(){ vari; for(vari=0;i<10;i++){ nimo.fn.addBall(); } nimo.fn.drawBall(true); } } </script> </body> </html>