1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > html绘制图形的关键三步 基于HTML5的绘图——绘制简单图形

html绘制图形的关键三步 基于HTML5的绘图——绘制简单图形

时间:2023-01-23 00:45:35

相关推荐

html绘制图形的关键三步 基于HTML5的绘图——绘制简单图形

绘制矩形

HTML5中实现绘制矩形的效果可以调用上下对象的三个函数fillRect()、strokeRect()和clearRect()。这些函数的语法格式如下所示:

context.fillRect(x,y,width,heigth);//绘制矩形,以当前的fillStyle来填充

context.strokeRect(x,height);//绘制矩形,以当前的strokeStyle来填充

context.clearRect(x,height);//清除指定区域的像素

上述语法中都包含四个参数,第一个参数表示矩形起点的横坐标;第二个参数表示矩形起点的纵坐标;第三个参数表示矩形的宽度;第四个参数表示矩形的高度;坐标原点是canvas画布的左上角。

绘制矩形常用属性fillStyle和strokeStyle。fillStyle表示填充样式,在该属性中可以设置填充的颜色值;strokeStyle表示图形边框的样式,在该属性中可以设置边框的颜色值。另外这两个属性除了可以设置css外,还可以分别是图案和颜色渐变。

(1)添加canvas元素

(2)页面加载时直接调用脚本

function AddJuxing1(){

var canvas = document.getElementById("addJu1");

if(canvas && canvas.getContext){

var context = canvas.getContext("2d");

context.fillStyle="yellow";

context.strokeStyle="green";

context.lineWidth=1;

context.fillRect(30,100,200,100);

context.strokeRect(30,100);

}

}

window.addEventListener("load",AddJuxing1,true);

绘制直线

想要绘制直线需要使用路径,同绘制矩形一样,绘制开始时需要获取图形上下文对象。绘制矩形之外的其他图形时常用函数如下所示

beginPath():开始创建路径

moveTo(x,y):不绘制,只是将当前的位置移动到新的目标坐标,并且作为线条开始点

lineTo(x,y):绘制线条到指定的目标坐标(x,y),且在两个坐标之间画一条直线

stroke():绘制图形的边框

fill():填充一个实心图形,当调用该方法时开放的路径会自动闭合,而无需调用closePath函数

closePath():关闭路径

使用上面的函数绘制图形时,首先使用路径勾勒图形轮廓,然后设置颜色进行绘制,具体步骤如下所示:

(1)调用beginPath()函数创建路径

(2)创建图形的路径

(3)调用closePath函数关闭路径,这一步不是必须的

(4)设定绘制样式,然后调用fill()或stroke()函数绘制路径

下面通过一个简单的示例演示如何使用上述函数绘制直线

(1)页面中那个添加三个canvas元素,分别用于绘制不同的直线

(2)页面加载时调用javascript脚本

function addzhi1(){

var canvas = document.getElementById("addzhi1");

if(canvas && canvas.getContext){

var context = canvas.getContext("2d");

context.beginPath();//开始路径

context.lineWidth=1;//设置直线宽度为1

context.moveTo(20,100);//设置坐标起点

context.lineTo(150,100);//设置目标坐标

context.stroke();//调用stroke()函数绘制

}

}

function addzhi2(){

var canvas = document.getElementById("addzhi2");

if(canvas && canvas.getContext){

var context = canvas.getContext("2d");

context.beginPath();//开始路径

context.lineWidth=2;//设置直线宽度为1

context.moveTo(160,50);//设置坐标起点

context.lineTo(50,100);//设置目标坐标

context.lineTo(160,185);//设置目标坐标

context.stroke();//调用stroke()函数绘制

}

}

function addzhi3(){

var canvas = document.getElementById("addzhi3");

if(canvas && canvas.getContext){

var context = canvas.getContext("2d");

context.beginPath();//开始路径

context.lineWidth=3;//设置直线宽度为1

context.moveTo(160,185);//设置目标坐标

context.fill();//调用fill()函数绘制

}

}

window.addEventListener("load",addzhi1,true);

window.addEventListener("load",addzhi2,addzhi3,true);

(3)运行结果如下图所示:

绘制三角形

对上面的案例已经可以看出,绘制三角形只需将三个点组成的路径闭合即可,在上面的案例中,第二个canvas元素的脚本中添加context.lineTo(160,50),运行结果如下所示:

绘制圆形

使用canvas API中上下文对象的函数除了可以绘制直线、矩形、三角形外,还可以绘制圆形,绘制圆形时使用arc()函数,该函数基本语法如下所示:

context.arc(x,radius,startAngle,endAngle,anticlockwise);

上述代码中arc()函数主要包括六个参数,前两个参数x和y分别表示绘制圆形的起点横坐标和纵坐标;radius表示绘制圆形的半径;startAngle表示开始角度;endAngle表示结束角度;anticlockwise表示是否按照顺时针反向进行绘制

在canvas元素的API中绘制半径与弧时所指定的参数为开始弧度与结束弧度,如果习惯使用角度,可以使用如下方法将弧度转换为角度;

var radians = degress*180/Math.PI;

Math.PI即π,表示的角度为180°

注:arc()函数不仅可以绘制圆形,也可以用来绘制圆弧。使用时必须指定开始角度与结束角度,这两个参数据诶的那个了弧度。anticlockwise参数为一个布尔值的参数,当参数值为true时表示按照逆时针方向绘制,否则为顺时针方向绘制。

下面一个示例使用canvas元素及API中的常用内置函数实现圆形和圆弧的简单绘制,基本步骤如下所示:

(1)添加四个canvas元素,分别用来显示不同的圆形和圆弧

(2)页面加载时调用javascript脚本

function getcontext(id){

var canvas = document.getElementById(id);

if(canvas && canvas.getContext){

var context = canvas.getContext("2d");

return context;

}

}

function add1(){

var context = getcontext("add1");

context.beginPath();

context.arc(80,80,60,Math.PI,Math.PI*2,true);

context.stroke();

}

function add2(){

var context = getcontext("add2");

context.beginPath();

context.arc(80,(Math.PI*2/4),true);

context.fill();

}

function add3(){

var context = getcontext("add3");

context.beginPath();

context.arc(80,(Math.PI*2/4)*3,false);

context.stroke();

}

function add4(){

var context = getcontext("add4");

context.beginPath();

context.strokeStyle="blue";

context.arc(80,false);

context.stroke();

}

window.addEventListener("load",add1,add2,add3,add4,true);

(3)运行结果如下所示



本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。