【实践】canvas弹跳球----源码分享与知识点总结
2017-07-06 21:43
197 查看
html部分
css部分
js部分:
<h1>bouncing balls</h1> <canvas></canvas>
css部分
html, body { margin: 0; } body { overflow: hidden;// height: inherit;//这两句很重要,是宽高100%的重要因素之一 } h1 { font-size: 2rem; letter-spacing: -1px; position: absolute; margin: 0; top: -4px; right: 5px; color: transparent; text-shadow: 0 0 4px white; }
js部分:
var canvas = document.querySelector('canvas'); var ctx = canvas.getContext('2d'); var width = canvas.width = window.innerWidth; var height = canvas.height = window.innerHeight;//这两句也是宽高100%的重要因素之一 var balls=[]; // 随机数函数 function random(min,max) { var num = Math.floor(Math.random()*(max-min)) + min; return num; } //Ball构造器 function Ball(x,y,vX,vY,color,size){ this.x=x; this.y=y; this.vX=vX; this.vY=vY; this.color=color; this.size=size; } Ball.prototype.init=function(){ ctx.beginPath(); ctx.fillStyle=this.color; ctx.arc(this.x,this.y,this.size,0,2*Math.PI); ctx.fill(); } Ball.prototype.update=function(){ if(this.x+this.size>=width||this.x-this.size<=0){ this.vX=-this.vX; this.color='rgb('+random(0,255)+','+random(0,255)+','+random(0,255)+')'; } if(this.y+this.size>=height||this.y-this.size<=0){ this.vY=-this.vY; this.color='rgb('+random(0,255)+','+random(0,255)+','+random(0,255)+')'; } this.x+=this.vX; this.y+=this.vY; } //用来循环调用的函数 function fool(){ //这两句很重要!!!!! //每次调用这个函数就重新对整个canvas容器填充一次,不然上一帧留下的球是不会消失的 //而且rgba最后一个透明度用0.25效果超级好! //每次覆盖涂色透明度0.25,不会把上一帧的图完全覆盖,4个帧之内有一种渐变得效果 ctx.fillStyle = 'rgba(0, 0, 0, 0.25)'; ctx.fillRect(0, 0, width, height); //产生随机参数小球 while(balls.length<30){ var ball=new Ball(random(20,width-20), random(20,height-20), random(-10,10), random(-10,10), 'rgb('+random(0,255)+','+random(0,255)+','+random(0,255)+')', random(10,20)); balls.push(ball); } //对所有小球执行函数 for(var i=0;i<balls.length;i++){ balls[i].init(); balls[i].update(); } // requestAnimationFrame(fool());//这个是比setInterval()性能更好的一种解决方案,但是兼容性还不够好 } setInterval("fool()",20);
相关文章推荐
- android4.4系统源码下载编译经验分享及总结(2014最新实践)
- 摘自代码阅读方法与实践书籍的知识点总结
- 分享HTML5 canvas 的总结
- cocos2dx3.2开发 RPG《Flighting》(十五)最后的总结说明,以及源码分享
- Canvas做股票数据走势图实践分享(一)
- CSS易混淆知识点总结与分享-定位与布局
- 同学分享的一篇关于python知识点的总结(挺好,故转载)
- 关于canvas转为base64 image 图像的页面预览,上传和分享总结
- canvas知识点总结
- html5游戏源码之《三国杀版连连看》canvas游戏源码下载分享
- android 源码开发 关于编译等小知识点总结
- 由点及面--百度CRM团队敏捷转型实践分享总结 推荐
- 负载和安全方面知识点小总结[朋友分享] 集思广益
- 总结了几款源码,分享出来
- 网上分享的avi转码到mp4(aac+h264)源码的编译总结
- 用源码包安装php-4.34+mysql-4.0.16+apache-2.0.48+vbb-2.32实践总结
- 桌面倒计时2.0 涉及知识点详解及源码分享
- 总结了几款源码,分享出来
- [Android] 随时拍图像处理部分总结及源码分享
- 【总结】Amazon Kinesis实时数据分析最佳实践分享