HTML5学习笔记——canvas元素

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_39067385/article/details/81777896

canvas元素是专门用来绘制图形的,它是一块无色透明的区域。相当于在页面中放置一块“画布”,可以在其中绘制图形,但是不是通过鼠标作画,而是需要利用javascript编写在其中进行绘画的脚本

canvas元素需要指定ID、width、height三个属性;

<canvas id="canvas" width="400" height="300">a drawing of something</canvas>

使用canvas元素,必须先设置width和height属性,出现在开始标签和结束标签的内容是后背信息,如果浏览器不支持canvas元素,就会显示这些信息;

 绘制矩形需要经过的步骤

1)取得canvas元素的DOM对象;

2)取得上下文;

图形上下文是一个封装了很多绘图功能的对象。需要使用canvas对象的getContext方法获得图形上下文

3)填充与绘制边框

绘图的两种方式:填充绘制边框

填充:指填满图形内部;

绘制边框:不填满图形内部,只绘制图形的外框。

4)设定绘图样式

绘图样式:主要针对图形的颜色而言;

填充的样式——fillstyle(填充的颜色值)

边框的样式——strokeStyle(填入边框的颜色)

5)指定线宽

使用图形上下文对象的lineWidth属性设置图形边框的宽度

6)绘制矩形

fillRect(x,y,width,height):填充矩形;

strokeRect(x,y,width,height):绘制矩形边框;

<!DOCTYPE html>   
<head>   
<meta charset="UTF-8">  
<title>canvas元素示例</title>  
<script type="text/javascript">
	function draw(id){
		var canvas=document.getElementById(id);
		if (canvas==null) {
			return false;
		}
		var context=canvas.getContext("2d");
		context.fillStyle="#EEEEFF";
        context.fillRect(0, 0, 400,300);
        context.fillStyle="red";
        context.strokeStyle="blue";
        context.lineWidth=1;
        context.fillRect(50,50,100,100);
        context.strokeRect(50,50,100,100);
	}
</script>  
</head>  
<body onload="draw('canvas');">  
<h1>canvas元素示例</h1>  
<canvas id="canvas" width="400" height="300" />  
</body>  
</html>

7)擦除矩形区域

clearRect方法对矩形进行擦除,使得矩形区域之中的颜色全部变为透明;

context.clearRect(x,y,width,height);

 路径

1.绘制圆形

1)创建圆形路径的方法

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

x,y,radius表示的是起点横纵坐标以及半径;

startAngle:表示开始角度;

endAngle:表示结束角度;

anticlockwise:表示是否按逆时针方向进行绘制;true表示逆时针;false:表示顺时针方向;

arc方法不仅可以用来绘制图形,也可以用来绘制圆弧;

2)关闭路径后,路径的创建工作就完成了。但是还没有真正绘制任何图形;

3)绘制图形直接调用fill()(填充)或stroke()(绘制图形边框)。因为路径已经决定了图形的大小,所以就不需要再该方法中使用参数来指定图形大小了;

4)绘制椭圆的方法

context.ellipse(x,y,radiusX,radiusY,rotation,startAngle,endAngle,anticlockwise)

radiusX为椭圆的横向半径;radiusY为椭圆的纵向半径;rotation:椭圆顺时针旋转角度;

	function draw(id){
		var canvas=document.getElementById(id);
		if (canvas==null) {
			return false;
		}
		var context=canvas.getContext("2d");
		context.fillStyle="#EEEEFF";
        context.fillRect(0, 0, 400,300);
        var n=0;
        for (var i = 0; i <10; i++) {
        	//开始创建路径
        	context.beginPath();
        	//绘制圆形
            context.arc(i*25, i*25, i*10,0,Math.PI*2,true);
            //绘制椭圆
            // context.ellipse(i*25, i*25, i*10,i*20,30,0,Math.PI*2,true);
            //图形创建完成关闭路径
            context.closePath();
            // 设定绘制样式
            context.fillStyle='rgba(255,0,0,0.25)';
            // 绘制图形
            context.fill();
        }
	}

圆形                                                                                                椭圆

    

5)不关闭路径会怎么样?

如果把以上例子中的开始创建路径和关闭路径两句删除,则会出现以下情况;

在画布中先是绘制一个深红色的半径最小的圆,然后每次半径变大的同时,颜色变淡。

原因:

因为已经创建的路径在绘制完图形后一直存在,通过for循环就相当于图形进行了一次又一次的绘制,第一个圆形实质上绘制了10次,所以图形颜色才会是上图效果;

注意:如果不关闭路径,已经创建的路径会永远保留着,就算用fill方法与stroke方法在页面上将图形已经绘制完毕,路径都不会消失。所以对于路径的何时开何时关要把握好。

2.绘制直线

1)moveTo(x,y) :将光标移动到指定的坐标点,绘制直线的时候为起点;

2)lineTo(x,y):在moveTo方法中指定的起点和参数中指定的直线终点之间绘制一条直线;

3)可以使用图形上下文对象的lineCap属性为直线添加线帽

  ① butt:默认属性值,不为直线添加线帽;

  ② round:为直线添加圆形线帽;

  ③ square:为直线添加正方形线帽;

4)上下文对象的lineJoin属性指定两条直线交汇时的拐角形状

  ① miter:默认值,创建尖角拐角;

  ② round:创建圆角拐角;

  ③ bevel:创建斜角拐角;

5)setLineDash(数组)自定义绘图时使用的虚线形状

参数数组用于设置线段长度以及线段与线段之间距离的数值;

  ① 数组中只有一个数值时,表示线段长度以及线段与线段之间的距离等于该数值;

  ② 如果数值数量超过2,数组中的数值数量为偶数时,第奇数个数值代表线段长度,第偶数个为线段与线段之间的距离;

  ③ 如果数组数量大于1,且不为偶数时,浏览器自动数组中数值使得数组数量为偶数倍;

	function draw(id){
		var canvas=document.getElementById(id);
		if (canvas==null) {
			return false;
		}
		var context=canvas.getContext("2d");
		context.fillStyle="#EEEEFF";
        	//开始创建路径
        	context.beginPath();
        	context.lineWidth=10;
        	//添加圆形帽
        	context.lineCap="round";
            // 设定绘制样式
            context.moveTo(20, 20);
            context.lineTo(200, 20);
            context.stroke();
            context.closePath();
            context.beginPath();
        	context.lineWidth=10;
        	//添加正方形帽
        	context.lineCap="square";
        	// 起点
            context.moveTo(20, 100);
            // 直线终点
            context.lineTo(200, 100);
            // 绘制图形
            context.stroke();
            context.closePath();
            context.beginPath();
            context.lineWidth=10;
         //    //拐角形状
            context.lineJoin="round";
            // context.lineJoin="bevel";
            context.moveTo(250, 20);
            context.lineTo(250, 100);
            context.lineTo(350, 100);
            context.stroke();
            context.closePath();
	}

 

     

	function draw(id){
		var canvas=document.getElementById(id);
		if (canvas==null) {
			return false;
		}
		var context=canvas.getContext("2d");
		context.fillStyle="#EEEEFF";
        	   //    //设置线段与线段距离15像素
            context.beginPath();
            context.lineWidth=5;
            context.setLineDash([5]);
            context.moveTo(400, 20);
            context.lineTo(550, 20);
            context.stroke();
            context.closePath();

            context.beginPath();
            context.lineWidth=5;
            // 数值量为2个
            context.setLineDash([5,10]);
            context.moveTo(400, 45);
            context.lineTo(550, 45);
            context.stroke();
            context.closePath();
           // 数值量超过2个,且为偶数个
            context.beginPath();
            context.lineWidth=5;
            context.setLineDash([5,10,15,20]);
            context.moveTo(400, 70);
            context.lineTo(580, 70);
            context.stroke();
            context.closePath();
            //数值量大于1,且不为偶数
            context.beginPath();
            context.lineWidth=5;
            context.setLineDash([5,10,20]);
            context.moveTo(400, 100);
            context.lineTo(580, 100);
            context.stroke();
            context.closePath();
	}

猜你喜欢

转载自blog.csdn.net/baidu_39067385/article/details/81777896
今日推荐