之前就说要写的,今天补出来;
先看效果:
基本代码:
要实现
<!doctype html>
<html>
<head>
<style>
canvas {
background: yellow
}
</style>
<meta charset="utf-8">
</head>
<body onload="draw()">
<canvas id="cv" width="500" height="500">
</canvas>
<button id="start">开始</button>
<script type="text/javascript">
此处写代码
</script>
</body>
</html>
首先需要定义一个画圆的基本样式所需要的属性;
function draw(x, y, r) {
var canvas = document.getElementById("cv");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#" + getN(255, 0).toString(16) + getN(255, 0).toString(16) + getN(255, 0).toString(16);
ctx.strokeWidth = 2;
ctx.beginPath();
ctx.arc(x, y, r, 0, 2 * Math.PI, false);
ctx.fill()
}
}
这里strokeStyle指的是圆的颜色;
这里才用随机生成的方式
ctx.fillStyle = "#" + getN(255, 0).toString(16) + getN(255, 0).toString(16) + getN(255, 0).toString(16);
其中的随机数字是:
function getN(max, min) {
return Math.floor(Math.random() * (max - min) + min)
}
为了判断生成了多少个圆,我定义了一个基本变量,以此控制何时清空画布;
var z = 0;
这里还需要定义画圆的方法,
function startDrawing() {
var x = getN(400, 100), y = getN(x, 10), r = getN(x / 8, y / 8);
if (z > 20) {
document.getElementById("cv").getContext("2d").clearRect(0, 0, 500, 500);
z=0;
startDrawing()
} else {
draw(x, y, r);
draw(y, x, r);
z++;
}
}
然后就可以画圆了,这里我们通过点击按钮开始画圆
var timer=null;
start.onclick = function () {
clearInterval(timer);
timer=setInterval(function () {
startDrawing()
}, 100)
}
最后补上完整代码
<!doctype html>
<html>
<head>
<style>
canvas {
background: yellow
}
</style>
<meta charset="utf-8">
</head>
<body onload="draw()">
<canvas id="cv" width="500" height="500">
</canvas>
<button id="start">开始</button>
<script type="text/javascript">
function draw(x, y, r) {
var canvas = document.getElementById("cv");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#" + getN(255, 0).toString(16) + getN(255, 0).toString(16) + getN(255, 0).toString(16);
ctx.strokeWidth = 2;
ctx.beginPath();
ctx.arc(x, y, r, 0, 2 * Math.PI, false);
ctx.fill()
}
}
function getN(max, min) {
return Math.floor(Math.random() * (max - min) + min)
}
var z = 0;
function startDrawing() {
var x = getN(400, 100), y = getN(x, 10), r = getN(x / 8, y / 8);
if (z > 20) {
document.getElementById("cv").getContext("2d").clearRect(0, 0, 500, 500);
z=0;
startDrawing()
} else {
draw(x, y, r);
draw(y, x, r);
z++;
}
}
var timer=null;
start.onclick = function () {
clearInterval(timer);
timer=setInterval(function () {
startDrawing()
}, 100)
}
</script>
</body>
</html>
今天看了看发现因为xyr的范围问题,所以大多数都生成在右下角,所以略加改动;
function startDrawing() {
this.create=function(){
var x = getN(400, 50), y = getN(400, 50), r = getN(x / getN(30,5), y / getN(30,2));
draw(x, y, r);
z++;
};
if (z > 88) {
document.getElementById("cv").getContext("2d").clearRect(0, 0, 500, 500);
z=0;
} else {
this.create();
this.create();
this.create();
}
}
这里增加了this.create属性,其实还可以用类的概念,不过下来再说吧;
对了之前说过的狂点按钮,生成速度加快的问题也得到解决了。
var timer=null;
start.onclick = function () {
clearInterval(timer);
timer=setInterval(function () {
startDrawing()
}, 100)
}
就是点击进入时首先清定时器,然后再开启定时器;
以下是第二版的完整代码:
<!doctype html>
<html>
<head>
<style>
canvas {
background: yellow
}
</style>
<meta charset="utf-8">
</head>
<body>
<canvas id="cv" width="500" height="500">
</canvas>
<button id="start">开始</button>
<script type="text/javascript">
function draw(x, y, r) {
var canvas = document.getElementById("cv");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#" + getN(255, 0).toString(16) + getN(255, 0).toString(16) + getN(255, 0).toString(16);
ctx.strokeWidth = 2;
ctx.beginPath();
ctx.arc(x, y, r, 0, 2 * Math.PI, false);
ctx.fill()
}
}
function getN(max, min) {
return Math.floor(Math.random() * (max - min) + min)
}
var z = 0;
function startDrawing() {
this.create=function(){
var x = getN(400, 50), y = getN(400, 50), r = getN(x / getN(30,5), y / getN(30,2));
draw(x, y, r);
z++;
};
if (z > 88) {
document.getElementById("cv").getContext("2d").clearRect(0, 0, 500, 500);
z=0;
} else {
this.create();
this.create();
this.create();
}
}
var timer=null;
start.onclick = function () {
clearInterval(timer);
timer=setInterval(function () {
startDrawing()
}, 100)
}
</script>
</body>
</html>