使用HTML5 Canvas创建一个图案
HTML5 Canvas是用于绘制图形和动画的HTMl标签,它可以通过JavaScript在网页中的画布上实时绘制不同效果的图案。本文将介绍如何使用HTML5 Canvas创建一个简单的多彩图案。
步骤一:创建画布
首先,我们需要在HTML中创建一个位于页面中央的画布,代码如下:
<canvas id="myCanvas" width="500" height="500"></canvas>
上述代码中的“myCanvas”是画布的ID,宽和高分别为500像素,可以根据需要进行调整。
步骤二:获取Canvas上下文
接下来,我们需要在JavaScript中获取绘制Canvas图形所需的上下文。在Canvas中有两种类型的上下文:2D和3D。我们的图案将是2D的,因此我们需要获取2D上下文,代码如下:
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
上述代码中的“ctx”即为我们所需的2D上下文。
步骤三:绘制图案
接下来,我们使用canvas上下文的方法绘制图案。本教程将绘制一个由多个相交的圆形构成的图案。
首先,我们需要定义一个圆形对象,其中包含圆形的坐标、半径、颜色等属性,代码如下:
function Circle(x, y, r, color){
this.x = x;
this.y = y;
this.r = r;
this.color = color;
this.draw = function(){
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, 2*Math.PI, false);
ctx.fillStyle = this.color;
ctx.fill();
}
}
上述代码中,我们定义了一个Circle函数,用于创建圆形对象,并在其原型对象上定义了一个draw方法,用于在Canvas上下文中绘制圆形。
接下来,我们需要定义一个由多个相交的圆形构成的图案。我们可以计算出圆形相对于Canvas的坐标,并将每个圆形保存到一个数组中,代码如下:
var circles = [];
var radius = 100;
for(var i=0; i<10; i++){
var x = Math.random() * (canvas.width - radius*2) + radius;
var y = Math.random() * (canvas.height - radius*2) + radius;
circles.push(new Circle(x, y, radius, "rgb(" + Math.random()*255 + "," + Math.random()*255 + "," + Math.random()*255 + ")"));
}
上述代码中,我们循环10次,随机生成圆形的坐标,并将每个圆形的颜色设置为随机颜色,在数组中保存。
步骤四:绘制圆形
最后,我们需要在Canvas上下文中绘制多个圆形。我们可以遍历圆形数组,并调用每个圆形的draw方法绘制圆形,代码如下:
function draw(){
ctx.clearRect(0, 0, canvas.width, canvas.height);
for(var i=0; i<circles.length; i++){
circles[i].draw();
}
}
setInterval(draw, 100);
上述代码中,我们在draw函数中清除Canvas,并遍历圆形数组,逐个绘制圆形。我们使用setInterval方法使得我们的图案可以在Canvas中实时绘制。
效果展示
下面是使用HTML5 Canvas创建的多彩图案效果的展示:
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
function Circle(x, y, r, color){
this.x = x;
this.y = y;
this.r = r;
this.color = color;
this.draw = function(){
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, 2*Math.PI, false);
ctx.fillStyle = this.color;
ctx.fill();
}
}
var circles = [];
var radius = 100;
for(var i=0; i<10; i++){
var x = Math.random() * (canvas.width - radius*2) + radius;
var y = Math.random() * (canvas.height - radius*2) + radius;
circles.push(new Circle(x, y, radius, "rgb(" + Math.random()*255 + "," + Math.random()*255 + "," + Math.random()*255 + ")"));
}
function draw(){
ctx.clearRect(0, 0, canvas.width, canvas.height);
for(var i=0; i circles[i].draw(); } } setInterval(draw, 100);