1. 程式人生 > >javascript學習記錄——canvas元素的基本操作

javascript學習記錄——canvas元素的基本操作

canvas元素

       總:canvas元素是javascript中一種繪圖的重要工具

用法:

       1,引入<canvas>元素

<canvas id="myCanvas" width="500" height="500" style="border:solid">
    你的瀏覽器不支援canvas畫布元素,請更新瀏覽器獲得演示效果。
</canvas>
這句話的效果就是,在<body>元素中間新增一塊畫布,設定其寬度和高度,最後的style = "border:solid"的執行效果是將畫布的邊顯示出來,方便我們看見畫布的大小,中間的那段文字,在瀏覽器不支援canvas元素是就會顯現出來。

       2,獲取上下文

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

第一句話,是通過canvas物件的id來獲取canvas物件

第二句話,獲取2d效果的文字

       3,繪製基本圖形

連線:

      a,畫線放法

      moveTo(x,y)函式:確定線的其實座標,x,y為畫布中的起始座標

      lineTo(x,y)函式:確定線的終點座標,x,y為畫布中的起始座標

      srtoke()函式:將畫好的座標連線起來

      b,線條屬性

      strokeStyle:改變線條的顏色

      設定方法:

                        context.strokeStyle = "#F00";//用個十六進位制數表示分別表示紅綠藍的程度

                        context.strokeStyle = "#FF0000";//用6個十六進位制數分別表示紅綠藍的程度

                        context.strokeStyle = rgba(255,0,0,1);//前三個參量也是紅綠藍的程度,最後一個參量代表透明度

                        context.strokeStyle = "red";//用英文來代表顏色

      lineWidth:設定線條的寬度,預設值為1

      設定方法:

                         context.lineWidth = 數字(代表寬度)

      lineCap()函式:設定線條的頭的形狀,有三種形式"round","square","butt",

      設定方法:

                          context.lineCap = "butt";

      lineJoin:設定線條轉角的形狀,有三種形式miter,round,bevel.

      設定方法:

                           context.lineJoin = "miter";

      (注:lineJoin屬性為miter時的效果受到miterLimit屬性的影響,miterLimit預設值為10,即外側的延伸時兩條交匯處內角與外角的距離)

     
以畫正六邊形為例給出示例程式碼:

<!DOCTYPE html>
<html>
<head>
    <title>正六邊形</title>
    <meta charset="utf-8">
</head>
<body>
<canvas id="myCanvas" width="250" height="150" style="border:solid">
    你的瀏覽器不支援canvas畫布元素,請更新瀏覽器獲得演示效果。
</canvas>
<script type="text/javascript">
    var canvas = document.getElementById("myCanvas");
	var context = canvas.getContext("2d");
	context.beginPath();
	
	
	context.moveTo(60,30);//初始點
	var k = -60,nowX =60,nowY = 30;
	var degToRad = Math.PI/180;
	
	context.strokeStyle = "#FF00FF";//設定線條顏色
	context.lineWidth = 5;//設定線條寬度
	context.lineJoin = "round";//設定拐點形狀
	
	while(k<270)
	{
		context.lineTo(nowX,nowY);//描出六邊形的其他各點
		k += 60;
		nowX = nowX + 60*Math.cos(k*degToRad);
		nowY = nowY + 60*Math.sin(k*degToRad);
	}
	context.closePath();//封閉圖形
	context.stroke();//連線
</script>
</body>
</html>
執行效果:

矩形:

       rect(x,y,width,height)函式:設定矩形的外框,之後要用stroke()函式連線,x,y代表矩形的坐上角頂點的座標,width和height分別代表寬度和高度

       strokeRect(x,y,width,height)函式的效果等於rect() + stroke()

       fill()函式,將閉合圖形內部進行塗色,預設為黑色,可以通過fillStyle函式進行顏色設定,設定方法與strokeStyle相同

       fillRect(x,y,width,height)函式=rect() + fill()

       clearRect(x,y,width,height)函式可以在已經畫好的圖形中間掏出一個空白空間,同樣要配合stroke()函式使用

樣例程式碼:

<!DOCTYPE HTML>
<HTML>
<head>
	<title>幾種矩形的繪製方法</title>
	<meta charset="UTF-8">
</head>
<body>
<canvas id="myCanvas" width="200" height="200" style="border:solid">
</canvas>
<script type="text/javascript">
	var canvas = document.getElementById("myCanvas");
	var context = canvas.getContext("2d");
	
	context.beginPath();
	context.rect(10,10,50,50);
	context.stroke();
	
	context.strokeRect(70,10,50,50);
	
	context.fillStyle = "#FF00FF";
	context.fillRect(10,70,50,50);
	
	context.fillStyle = "#FF0000";
	context.fillRect(70,70,50,50);
	context.clearRect(80,80,30,30);
	context.stroke();
	
</script>
</body>
</HTML>

執行效果:

圓與圓弧:

      arc(x,,y,r,startA,endA,direction)函式:其中x,y代表圓心的位置,r代表半徑,後面兩個引數代表開始角度和結束角度,最後一個引數,代表畫圓的方向是順時針還是逆時針。該函式要搭配stroke()來使用,注意其中角度是弧度制|!

樣例程式碼(繪製奧運五環):

<!DOCTYPE html>
<html>
<head>
    <title>奧運五環</title>
    <meta charset="utf-8">
</head>
<body>
<canvas id="myCanvas" width="500" height="500" style="border:solid">
    你的瀏覽器不支援canvas畫布元素,請更新瀏覽器獲得演示效果。
</canvas>
<script type="text/javascript">
    var canvas = document.getElementById("myCanvas");
	var context = canvas.getContext("2d");
	var degToRad = Math.PI/180;
	context.lineWidth = 5;
	
	context.beginPath();
	context.strokeStyle = "blue";
	context.arc(100,80,50,0,360*degToRad,true);
	context.stroke();
	
	context.beginPath();
	context.strokeStyle = "black";
	context.arc(210,80,50,0,360*degToRad,true);
	context.stroke();
	
	context.beginPath();
	context.strokeStyle = "red";
	context.arc(320,80,50,0,360*degToRad,true);
	context.stroke();
	
	context.beginPath();
	context.strokeStyle = "yellow";
	context.arc(155,145,50,0,360*degToRad,true);
	context.stroke();
	
	context.beginPath();
	context.strokeStyle = "green";
	context.arc(265,145,50,0,360*degToRad,true);
	context.stroke();
</script>
</body>
</html>

執行效果:

繪製文字:

      fillText(text,x,y,maxWidth)函式和strokeText(text,x,y,maxWidth)函式:用來繪製文字,前者繪製的文字為空心字,後者為實心,引數text為文字內容,x,y為文字開始座標,maxWidth為最大寬度,要是文字的內容超過最大寬度,會自動壓縮到該寬度。

      font可以設定字型大小和字型風格,例如:

                     context.font = "30px 宋體";

                     context.font = "40px  微軟雅黑";

      注:系統預設字型大小為10px

文字的粗細和傾斜:

      表示粗細有四種屬性值:normal(正常)、bold(粗體)、bolder(加粗體)、lighter(細柔)

      設定方法例如:

                     context.font = "normal 30px 宋體";

                     context.font = "bold 40px  微軟雅黑";

      也可以用數字來直接設定:

                     context.font = "200 30px 宋體";

                     context.font = "400 40px  微軟雅黑";


       表示傾斜的有三種屬性值:normal、italic、oblique,其中後兩者能讓字型傾斜,italic是指文字的傾斜體,oblique是指傾斜的文字,但效果基本一樣。

樣例程式碼:

<!DOCTYPE html>
<html>
<head>
    <title>文字1</title>
    <meta charset="utf-8">
</head>
<body>
<canvas id="myCanvas" width="350" height="200" style="border:solid">
    你的瀏覽器不支援canvas畫布元素,請更新瀏覽器獲得演示效果。
</canvas>
<script type="text/javascript">
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
	
    context.font = "30px Arial";
    context.fillText("Hello World!", 20, 30);
	
    context.font = "bold 30px Arial";
    context.fillText("Hello World!(bold)", 20, 70);
	
    context.font = "italic 30px Arial";
    context.fillText("Hello World!(italic)", 20, 110);
	
    context.font = "oblique 30px Arial";
    context.fillText("Hello World!(oblique)", 20, 150);
	
    context.font = "600 italic 30px Arial";
    context.fillText("Hello World!(600 italic)", 20, 190);
</script>
</body>
</html>

執行效果:

文字的對齊方式:

      textAlign屬性:修改文字的對齊方式,有五個屬性:start,end,left,right,center。

      textBaseline屬性:修改文字的對齊基線,有6個屬性:alphabetic,top,bottom,middle,hanging,ideographic。

樣例程式碼:

<!DOCTYPE html>
<html>
<head>
    <title>文字對齊方式</title>
    <meta charset="utf-8">
</head>
<body>
<canvas id="myCanvas" width="350" height="250" style="border:solid">
    你的瀏覽器不支援canvas畫布元素,請更新瀏覽器獲得演示效果。
</canvas>
<script type="text/javascript">
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
    context.lineWidth = 2;
    context.beginPath();
    context.moveTo(170, 10);
    context.lineTo(170, 230);
    context.stroke();

    context.font = "30px Arial";
    context.textAlign = "start";
    context.fillText("Hello World!", 170, 50);

    context.textAlign = "end";
    context.fillText("Hello World!", 170, 90);

    context.textAlign = "left";
    context.fillText("Hello World!", 170, 130);

    context.textAlign = "right";
    context.fillText("Hello World!", 170, 170);

    context.textAlign = "center";
    context.fillText("Hello World!", 170, 210);

</script>
</body>
</html>

執行效果:

樣例程式碼:

<!DOCTYPE html>
<html>
<head>
    <title>文字對齊基線</title>
    <meta charset="utf-8">
</head>
<body>
<canvas id="myCanvas" width="400" height="250" style="border:solid">
    你的瀏覽器不支援canvas畫布元素,請更新瀏覽器獲得演示效果。
</canvas>
<script type="text/javascript">
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
    context.lineWidth = 2;
    context.beginPath();
    context.moveTo(10, 50);
    context.lineTo(390, 50);
    context.moveTo(10, 120);
    context.lineTo(390, 120);
    context.moveTo(10, 190);
    context.lineTo(390, 190);
    context.stroke();

    context.font = "30px Arial";
    context.textBaseline = "bottom";
    context.fillText("Hello World!", 20, 50);

    context.textBaseline = "top";
    context.fillText("Hello World!", 220, 50);

    context.textBaseline = "ideographic";
    context.fillText("Hello World!", 20, 120);

    context.textBaseline = "hanging";
    context.fillText("Hello World!", 220, 120);

    context.textBaseline = "alphabetic";
    context.fillText("Hello World!", 20, 190);

    context.textBaseline = "middle";
    context.fillText("Hello World!", 220, 190);
</script>
</body>
</html>

執行效果:

至此,javascript中的canvas元素的基礎功能就基本說完了。