ให้เรตสมาชิก: 3 / 5

ดาวใช้งานดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

บทที่ 3 HTML5 Canvas
   Canvas  คือ Tag ตัวหนึ่งใน HTML5 ซึ่งเป็นคำสั่งใช้ในการสร้างงานกราฟฟิก จะมี Tag สั้นๆ จำง่ายๆ ก็คือ <canvas></canvas>
ข้อดีของ แท็ก Canvas
    ช่วยเปลี่ยนลูกเล่นการแสดงผลของเว็บเพจไปอีกมากเดิมที HTML เป็นการวาดออบเจคต์ (เช่น ข้อความ รูป กล่องข้อความ ฯลฯ) ขึ้นมาเป็นหน้าจอ และสามารถตกแต่งออบเจคต์แต่ละตัวได้ในระดับหนึ่งผ่าน CSS (เช่น ใส่สีพื้น วาดเส้นขอบ ทำมุมโค้ง) แต่ในภาพรวม HTML ยังไม่สามารถแสดงกราฟิกแบบราสเตอร์ (raster) ได้ด้วยตัวมันเอง ต้องทำภาพมาแปะอีกทอดหนึ่ง แท็ก canvas ที่ถูกเพิ่มเข้ามาช่วยให้เราสามารถ "วาดภาพ" ลงบนเว็บเพจได้โดยตรง โดยขอบเขตของภาพที่วาดก็จะอยู่ในออบเจคต์ชื่อ canvas นั่นเอง
   ลักษณะของ canvas แตกต่างจากภาพชนิดอื่นๆ คือ มันไม่ได้จะแสดงได้เป็นภาพนิ่งเท่านั้น แต่มันสามารถเป็นภาพเคลื่อนไหวได้ด้วย และก็ไม่ได้เกิดจากการเรียกไฟล์ภาพขึ้นมาแสดงตรงๆ แต่เป็นการสั่งโดย javascript ทุกๆเส้นหรือทุกๆจุด และทุกๆการเคลื่อนไหวที่เกิดภายใต้ <canvas> เกิดจากการสั่งงานโดย javascript ทั้งสิ้น แล้วนำเข้ามาโชว์ด้วยการเรียกผ่าน id ของ <canvas> เข้าไป

1.การสร้างกรอบสี่เหลี่ยม

<canvas id="myCanvas" width="200" height="100" style="border:5px solid pink;"></canvas>

ตัวอย่างที่ 1 การสร้างกรอบสี่เหลี่ยม

<html>
<body>

<canvas id="ExCanvas" width="200" height="100"
style="border:5px solid pink;">
Your browser does not support the canvas element.
</canvas>

</body>
</html>

ผลลัพธ์ที่ได้คือ

   จาก HTML ด้านบน เป็นการเรียกให้ canvas id=ExCanvas มาแสดง โดยกำหนดพื้นที่ในการแสดงกว้าง 200 px และสูง 100 px มีกรอบล้อมรอบสีชมพูหนา 5 px
ในกรณีที่ browser ที่ใช้ไม่ support <canvas> จะขึ้นข้อความ Your browser does not support the canvas element

2.การสร้างรูปสี่เหลี่ยม

<script>
  ctx.rect(x, y, width, height);
</script>

จากดครงสร้างด้านบน 
   ใช้ rect() ในการสร้างรูปสี่เหลี่ยม และวางตำแหน่งรูปที่จุด x,y  โดยให้รูปขนาด กว้างและยาว เป็น width , height

ตัวอย่างที่ 2 การสร้างรูปสี่เหลี่ยม

<html>
<html>
<body>

<canvas id="myCanvas" width="200" height="100"
style="border:5px solid pink;">
Your browser does not support the canvas element.
</canvas>

<script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="red";
ctx.fillRect(0,0,150,75);
</script>

</body>
</html>

ผลลัพธ์ที่ได้คือ
  
    จากตัวอย่างที่ 2 จะเห็นว่าชุดคำสั่ง JavaScript ชุดนี้ได้เข้าถึง Element ที่ ID ที่ชื่อว่า myCanvas นั้นเอง สังเกตได้จากบรรทัด
var c=document.getElementById("myCanvas");  (myCanvas ในที่นี้คือตัวกรอบสีชมพูที่เราสร้างไว้ก่อนแล้ว)
   จากนั้นเมื่อหา Element ดังกล่าวเจอก็จะทำการสร้าง context object ขึ้นมา
var cxt=c.getContext("2d");  คำสั่งบรรทัดนี้ ตรง getContext(?2d?) เป็น built-in object ที่มาพร้อมกับ HTML5 ซึ่งจะประกอบไปด้วยคำสั่งต่างๆ เช่น คำสั่งวาดเส้นตรง วงกลม รูปสี่เหลี่ม ตัวหนังสือ รูปภาพ หรืออื่นๆ

    ต่อมาก็เป็นการสร้างรูปสี่เหลี่ยมพื่นภาพสีแดงขึ้นมา
fillStyle นั้นเป้นการกำหนดสีแดงลงไป ส่วน fillRect เป็นการกำหนด รูปร่าง ตำแหน่ง แล้วก็ขนาดของวัตถุ

cxt.fillStyle="red";
cxt.fillRect(0,0,150,75);
    
    ในที่นี้ cxt.fillRect(0,0,150,75); นี่หมายถึง รูปอยู่ที่จุด (x,y)=(0,0)  และมีขนาดกว้าง 150 px ,  ยาว 75 px
***(cxt. หรือ context.  เป็นชุดคั่งสั่งของ JavaScript)

3.การสร้างเส้นตรง

<script>
  ctx.beginPath();
  cntx.moveTo(x,y);
  cntx.lineTo(x,y);
  cntx.stroke();
  ctx.closePath();
</script>

ตัวอย่างที่ 3 การสร้างเส้นตรง

<html>
<body>

<canvas id="myCanvas" width="200" height="100"
style="border:5px solid pink;">
Your browser does not support the canvas element.
</canvas>

<script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();
ctx.closePath();
</script>

</body>
</html>

ผลลัพธ์คือ


4.การสร้างวงกลม

<script>
  cntx.arc(x, y, radius, 0 , 2 * Math.PI, false);
</script>

ตัวอย่างที่ 4 การสร้างรูปวงกลม

<html>
<body>

<canvas id="myCanvas" width="200" height="100"
style="border:5px solid pink;">
Your browser does not support the canvas element.
</canvas>

<script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.arc(95,50,40,0,2*Math.PI);
ctx.stroke();
</script> 

</body>
</html>

ผลลัพธ์ที่ได้คือ


5.การใส่ต้วอักษร

<script>
  cntx.font = 'italic 40px Calibri';
  cntx.fillText(str, x, y);
</script>

จากโครงสร้างด้านบน
   ใช้ font() ในการสร้าง ตัวอักษร  ในตัวอย่างนี้เป็นอักษรแบบ italic (สามารถเลือกเปลี่ยนเป็น bold หรือ normal ก็ได้) ขนาด 40 px
ใช้แบบอักษร เป็น  Calibri
ลักษณะเป็นแบบ fillText (สามารถเลือกเปลี่ยนเป็น strokeText คือ แบบที่มีเฉพาะเส้นขอบ ก็ได้) โดยอักษรอยู่ที่พิกัด x,y

ตัวอย่างที่ 5 การใส่ตัวอักษร

<html>
<body>

<canvas id="myCanvas" width="200" height="100"
style="border:5px solid pink;">
Your browser does not support the canvas element.
</canvas>

<script>

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="30px Arial";
ctx.fillText("Hello Nerd",10,50);

</script>

</body>
</html>

ผลลัพธ์คือ

 ข้อมูลอ้างอิง
http://www.w3schools.com

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ประกาศปิดหมวด ยกเลิกอัพเดดเนื้อหา และ งดตอบคำถามต่างๆ เกี่ยวกับ Magento
โดย mindphp ส 14 ก.ย. 2019 5:31 pm บอร์ด Magento user Guide Knowledge
0
21
ส 14 ก.ย. 2019 5:31 pm โดย mindphp
แนะนำ และสอนการใช้งาน Google Chrome Remote Desktop โปรแกรมรีโหมทหน้าจอ
โดย zend_framework ส 14 ก.ย. 2019 5:28 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
22
ส 14 ก.ย. 2019 5:28 pm โดย zend_framework
อยากทราบวิธีสร้างรูปภาพในไลน์กลุ่มแล้ว กดที่รูปเด้งเข้าไลน์@ของเราเอง
โดย Anonymous ส 14 ก.ย. 2019 4:38 pm บอร์ด Mobile Programming - Android, iOS, Window Phone
1
31
ส 14 ก.ย. 2019 4:52 pm โดย mindphp
อยากทราบวิธีที่จะให้ อาเรย์วนลูปอย่างไรครับ
โดย Patipat ส 14 ก.ย. 2019 3:46 pm บอร์ด Joomla Development
3
34
ส 14 ก.ย. 2019 5:25 pm โดย mindphp
สร้างแถบเมนู
โดย alonglot ส 14 ก.ย. 2019 12:35 pm บอร์ด Joomla Development
0
18
ส 14 ก.ย. 2019 12:35 pm โดย alonglot
งานประจำวันที่ 14 กันยายน 2562
โดย Patipat ส 14 ก.ย. 2019 10:39 am บอร์ด M088 - ปฏิภัทร สารธรรม
1
6
ส 14 ก.ย. 2019 7:03 pm โดย Patipat
งานประจำวันที่ 14 กันยายน 2562
โดย aninthana ส 14 ก.ย. 2019 10:22 am บอร์ด M092 - อนินธนา บุญยัง
2
12
ส 14 ก.ย. 2019 8:39 pm โดย thatsawan
งานประจำวันที่ 14 กันยายน 2562
โดย jamepiyawat ส 14 ก.ย. 2019 10:05 am บอร์ด M084 - นายปิยวัช เชาว์วิมล
1
4
ส 14 ก.ย. 2019 7:05 pm โดย jamepiyawat
งาน RML Purchase Requisition (PR)&APPLICATION FORM
โดย chatee supasand ศ 13 ก.ย. 2019 7:45 pm บอร์ด MT33 - นายชาตรี สุภาแสน
0
2
ศ 13 ก.ย. 2019 7:45 pm โดย chatee supasand
google photos เพิ่มฟีเจอร์ Memories นำภาพถ่ายหรือวิดีโอเก่า ๆ ของเรามาแสดง
โดย jamepiyawat ศ 13 ก.ย. 2019 6:08 pm บอร์ด Share Knowledge
0
18
ศ 13 ก.ย. 2019 6:08 pm โดย jamepiyawat
Microsoft เปลี่ยนชื่อ Microsoft To-Do เป็น To Do หวังให้ใช้งานแทน Wunderlis
โดย chatee supasand ศ 13 ก.ย. 2019 6:05 pm บอร์ด Microsoft Office Knowledge & line & Etc
0
19
ศ 13 ก.ย. 2019 6:05 pm โดย chatee supasand
วิธีการ Export ข้อมูลมาเป็นไฟล์ Excel โดย phpbb
โดย Ittichai_chupol ศ 13 ก.ย. 2019 4:24 pm บอร์ด PHP Knowledge
0
24
ศ 13 ก.ย. 2019 4:24 pm โดย Ittichai_chupol
ข้อแตกต่างระหว่างสัญญาเช่าทางการเงินกับสัญญาเช่าดำเนินงาน
โดย EyePornnipa ศ 13 ก.ย. 2019 4:23 pm บอร์ด M089 - นางสาวพรนิภา ราชธานี
0
4
ศ 13 ก.ย. 2019 4:23 pm โดย EyePornnipa
อยากทราบวิธีการแก้ไข Undefined index ใน phpbb
โดย Ittichai_chupol ศ 13 ก.ย. 2019 3:26 pm บอร์ด Programming - PHP
1
35
ศ 13 ก.ย. 2019 3:36 pm โดย บุคคลทั่วไป
สินทรัพย์ถาวร (Fixed Assets) คือ
โดย EyePornnipa ศ 13 ก.ย. 2019 2:54 pm บอร์ด M089 - นางสาวพรนิภา ราชธานี
0
7
ศ 13 ก.ย. 2019 2:54 pm โดย EyePornnipa
อยากทราบวิธีทำให้ path way มีลูกศรชี ครับ
โดย jamepiyawat ศ 13 ก.ย. 2019 2:53 pm บอร์ด Joomla Development
1
30
ศ 13 ก.ย. 2019 2:55 pm โดย tsukasaz
R - ปรับ URL สำหรับ โหลดไฟล์ Joomla Core มาไว้ที่ jupdate.mindphp.com
โดย mindphp ศ 13 ก.ย. 2019 12:15 pm บอร์ด MDUpgrade
0
1
ศ 13 ก.ย. 2019 12:15 pm โดย mindphp
B - Allowed memory size of 134217728 bytes exhausted
โดย mindphp ศ 13 ก.ย. 2019 12:08 pm บอร์ด MDUpgrade
2
2
ศ 13 ก.ย. 2019 12:30 pm โดย mindphp
สอบถามครับ RML สร้างเส้นตาราง แบบนี้ยังไงอะครับ
โดย chatee supasand ศ 13 ก.ย. 2019 10:28 am บอร์ด Programming - C/C++ & java & Python
2
50
ศ 13 ก.ย. 2019 11:03 am โดย chatee supasand
งานประจำวันที่ 13 กันยายน 2562
โดย aninthana ศ 13 ก.ย. 2019 9:36 am บอร์ด M092 - อนินธนา บุญยัง
1
10
ศ 13 ก.ย. 2019 6:00 pm โดย aninthana