canvas小球
小球碰撞效果是采用面向对象的方式写的,在小球的构造器里包含了小球的属性值,大小,移动速度,半径大小以及颜色。 在小球的原型方法里,添加了小球运动的方法,当小球碰撞到屏幕边界的时候进行反弹。 小球是采用h5的canvas绘制,采用了性能更高的requestanimationframe作为计时器,该计时器是以屏幕的刷新率作基准,CPU占用较少,性能比settimeout以及setinterval性能更高, |
|
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |
<title>Ball</title> | |
<style> | |
html, | |
body { | |
margin: 0; | |
padding: 0; | |
width: 100%; | |
height: 100%; | |
} | |
canvas { | |
background: #000; | |
} | |
</style> | |
</head> | |
<body> | |
<canvas id='canv'>您的浏览器不支持CANVAS,请更换浏览器!!!</canvas> | |
<script> | |
document.addEventListener('resize', resize) | |
function resize() {//监听屏幕缩放 | |
canvs.width = window.innerWidth; | |
canvs.height = window.innerHeight; | |
} | |
var canvs = document.getElementById('canv'); | |
canvs.width = window.innerWidth; | |
canvs.height = window.innerHeight; | |
var ctx = canvs.getContext('2d');//获得canvas绘图环境 | |
var ball = function () {//小球构造器 | |
this.bx = Math.random() * canvs.width;//小球x轴的位置 | |
this.by = Math.random() * canvs.height;//小球y轴的位置 | |
this.r = Math.random() * 20 + 10;//小球的半径 | |
this.color = 'rgba('+Math.ceil (Math.random()*255)+','+Math.ceil (Math.random()*255)+','+Math.ceil (Math.random()*255)+','+Math.random()/4+')'//小球的颜色 | |
this.vx = Math.random() *10-5;//小球的x轴方向的运动速度 | |
this.vy = Math.random() *4-2;//小球y轴方向的速度 | |
} | |
ball.prototype.draw = function () {//小球绘制方法 | |
// ctx.fillStyle = 'rgba(255,255,255,0.1)'; | |
// ctx.fillRect(0, 0, canvs.width, canvs.height); | |
// ctx.clearRect(0, 0, canvs.width, canvs.height); | |
ctx.beginPath();//开始路径 | |
var grd=ctx.createRadialGradient(this.bx,this.by,0,this.bx,this.by,this.r);//生成小球径向渐变色 | |
grd.addColorStop(0,"white");//里面的颜色 | |
grd.addColorStop(1,this.color);//外界的颜色 | |
ctx.globeAlpha=0.2;//透明度 | |
// Fill with gradient | |
ctx.fillStyle=grd;//以渐变色填充小球 | |
ctx.arc(this.bx, this.by, this.r, 0, Math.PI * 2, true);//画圆函数 | |
ctx.fill() | |
} | |
ball.prototype.move = function () {//小球的移动方法 | |
this.bx += this.vx; | |
this.by += this.vy; | |
// ball.vy *= 0.99; | |
// ball.vy += 0.25; | |
if (this.by + this.vy > canvs.height || this.by + this.vy < 0) { | |
this.vy = -this.vy;//边界判定,到边界后反向弹 | |
// | |
} | |
if (this.bx + this.vx > canvs.width || this.bx + this.vx < 0) { | |
this.vx = -this.vx; | |
// nball.color = '#' + ('00000' + ((Math.random() * 16777215))) | |
} | |
} | |
function gogo(num) { | |
num= num||10; | |
var globe = []; | |
for (var i = 0; i < num; i++) { | |
var nball = new ball(); | |
globe.push(nball) | |
// nball.draw() | |
} | |
console.log(globe) | |
function ballmove(){ | |
// ctx.fillStyle = 'rgba(255,255,255,0.3)'; | |
// ctx.fillRect(0, 0, canvs.width, canvs.height); | |
ctx.clearRect(0, 0, canvs.width, canvs.height); | |
for (var j = globe.length - 1; j >= 0; j--) { | |
// globe[j].draw() | |
globe[j].move(); | |
globe[j].draw() | |
} | |
window.requestAnimationFrame(ballmove) | |
} | |
ballmove() | |
} | |
gogo(100) | |
// function drawcrc() { | |
// // ctx.fillStyle = 'rgba(255,255,255,0.3)'; | |
// // ctx.fillRect(0, 0, canvs.width, canvs.height); | |
// ctx.clearRect(0, 0, canvs.width, canvs.height); | |
// var nball = new ball(); | |
// nball.draw(); | |
// window.requestAnimationFrame(drawcrc) | |
// } | |
// drawcrc(); | |
</script> | |
</body> | |
</html> |
canvas小球的更多相关文章
- h5 canvas 小球移动
h5 canvas 小球移动 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- canvas小球动画原理
随着html5发展,canvas标签作为h5革命性的发展标志也越来越流行.canvas标签的强大之处,不仅在于它可以作为一个独立的画布,也可以利用canvas做一些动画而不用导入flash文件.同时, ...
- 再探canvas(小球实例)
之前学习过canvas的一些使用,也用过canvas绘制过时钟, 但是很久不用,有些遗忘了,这里做一个简单的回顾. 在web页面创建一个canvas画布非常简单,如下即可: <canvas id ...
- canvas小球动画
绘制小球 我们将会画一个小球用于动画学习,所以首先在画布上画一个球.下面的代码帮助我们建立画布. <canvas id="></canvas> 跟平常一样,我们需要先 ...
- canvas小球 时间倒计时demo-优化
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- canvas小球 时间demo
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- canvas动画气球
canvas小球的动画我用canvas画布实现的小球动画效果,可以参考下 我用canvas画布实现的小球动画效果,可以参考下 我用canvas画布实现的小球动画效果,可以参考下 我用canvas画布实 ...
- HTML5 Canvas彩色小球碰撞运动特效
脚本简介 HTML5 Canvas彩色小球碰撞运动特效是一款基于canvas加面向对象制作的运动小球动画特效. 效果展示 http://hovertree.com/texiao/html5/39/ ...
- canvas标签(1)--线条、矩形、圆形、文本、阴影、抛小球
从网上扒拉的代码,敲了敲代码玩. html页面显示内容很简单,只要写个canvas标签,给他一个id写js就可以了 <!DOCTYPE html> <html> <hea ...
随机推荐
- 用感知机(Perceptron)实现逻辑AND功能的Python3代码
之所以写这篇随笔,是因为参考文章(见文尾)中的的代码是Python2的,放到Python3上无法运行,我花了些时间debug,并记录了调试经过. 参考文章中的代码主要有两处不兼容Python3,一个是 ...
- python 小练习之生成手机号码
需求分析: 1 将固定的号码段放到list中 如:136 137 180 183等等 2 随机取8个数字元素 3 将固定号码段与随机产生的元素拼接在一起 4 写入文件 import stringdef ...
- linux iptables扩展,脚本防火墙
netfileter:防火墙内核态ip tables:防火墙用户态(管理防火墙规则) iptables的表和链表包括不同的链,链包括大量的规则4个表: raw,mangle,nat,filter5种链 ...
- 给VMware的虚拟机设置静态地址
最近在VMware 上运行新版本Linux 虚拟机集群,在给每个虚拟机设置静态IP时,遇到一些挫折,新版本有些变动,故记录下来备用. Centos版本信息7.4.1708: Ubuntu版本信息17. ...
- linux驱动---字符设备的注册register_chrdev说起
首先我们在注册函数里面调用了register_chrdev(MEM_MAJOR,"mem",&memory_fops),向内核注册了一个字符设备. 第一个参数是主设备号,0 ...
- HighCharts之2D半圆环图
HighCharts之2D半圆环图 1.实例源码 HalfDonut.html: <!DOCTYPE html> <html> <head> <meta ch ...
- IOS开发之XCode学习011:UISwitch控件
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 1.定义UIswitch控件,添加UIswitc ...
- JustMock .NET单元测试利器(三)用JustMock测试你的应用程序
用JustMock测试你的应用程序 本主题将指导您通过几个简单的步骤来使用Telerik®JustMock轻松测试您的应用程序.您将理解一个简单的原理,称为Arrange / Act / Assert ...
- ASP.NET Core 2.0: 二. 开发环境
macOS:Install Visual Studio for Mac 系统要求: macOS 10.12 Sierra 及更高版本 其他要求: 可能会要求安装xcode或android相关环境, 详 ...
- WPF基础篇之空间布局
由于之前自己做的都是大多是B/S架构的项目,加入新公司,公司现在用的WPF,在WPF中一个比较重要的知识点:布局 在网上找到一篇比较好的介绍WPF布局的文章. 文章地址:http://www.cnbl ...