HTML5的新的element,canvas,可以在Browser上繪製圖表/圖片。使用時必須訂出繪製的範圍(width/height),接著就可以開始用JavaScript進行繪圖了。目前多數支援canvas的browser看來也都只有支援2D,未來應該會有3D的。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Canvas/Simple shapes (rectangles)</title> </head> <body> <canvas id="myCanvas" width="300" height="150"> Fallback content, in case the browser does not support Canvas. </canvas> <script type="application/x-javascript"> // Get a reference to the element. var elem = document.getElementById('myCanvas'); // 判斷是否能取得context if (elem && elem.getContext) { // 你只能對每一個canvas做initialize一次(getContext). // context = canvas . getContext(contextId [, ... ]) var context = elem.getContext('2d'); if (context) { // context.fillRect(x, y, w, h) // 畫方形 context.fillRect(0, 0, 150, 100); // context.clearRect(x, y, w, h) // 清方形 context.clearRect(100,50, 50, 50); // context.strokeRect(x, y, w, h) // 畫框 context.strokeRect(150,100, 50, 50); } } </script> </body> </html>
fillRect(x, y, w, h)使用fillStyle來決定顏色。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Canvas/FillRect attribute</title> </head> <body> <canvas id="myCanvas" width="300" height="150"> Fallback content, in case the browser does not support Canvas. </canvas> <script type="application/x-javascript"> // Get a reference to the element. var elem = document.getElementById('myCanvas'); // 判斷是否能取得context if (elem && elem.getContext) { // 你只能對每一個canvas做initialize一次(getContext). // context = canvas . getContext(contextId [, ... ]) var context = elem.getContext('2d'); if (context) { context.fillStyle = 'pink'; context.fillRect(0, 0, 50, 50); context.fillStyle = '#f00'; // red context.fillRect(50, 50, 50, 50); context.fillStyle = '#0f0'; // green context.fillRect(100, 100, 50, 50); context.fillStyle = '#00f'; // blue context.fillRect(150, 150, 50, 50); // RGBA(red, green, blue, alpha) // Alpha1是透明度 context.fillStyle = 'RGBA(100, 100, 255, 0.2)'; context.fillRect(50, 50, 150, 150); } } </script> </body> </html>
而strokeRect(x, y, w, h)則會使用strokeStyle(顏色), lineWidth(粗細), lineJoin(連接觸樣式),等屬性來決定,其實就是line style。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Canvas/Line styles</title> </head> <body> <canvas id="myCanvas" width="300" height="150"> Fallback content, in case the browser does not support Canvas. </canvas> <script type="application/x-javascript"> // Get a reference to the element. var elem = document.getElementById('myCanvas'); // 判斷是否能取得context if (elem && elem.getContext) { // 你只能對每一個canvas做initialize一次(getContext). // context = canvas . getContext(contextId [, ... ]) var context = elem.getContext('2d'); if (context) { // The beginPath() starts a new path context.beginPath(); // reset the path to (0, 0) context.moveTo(0,0); context.strokeStyle = '#f00'; // lineWidth是線的大小 context.lineWidth = 1; context.strokeRect(0, 0, 20, 20); context.lineWidth = 10; context.strokeRect(30, 30, 20, 20); // LineJoin是連接處(轉角)的樣式 context.lineJoin = 'bevel'; context.strokeRect(60, 60, 20, 20); context.lineJoin = 'round'; context.strokeRect(90, 90, 20, 20); context.lineJoin = 'miter'; context.strokeRect(120, 120, 20, 20); } } </script> </body> </html>
參考資料:
- http://dev.opera.com/articles/view/html-5-canvas-the-basics/
- http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html
- https://developer.mozilla.org/en/Canvas_tutorial/Using_images
- http://wiki.moztw.org/%E7%94%A8_Canvas_%E7%95%AB%E5%9C%96
- http://www.w3school.com.cn/htmldom/dom_obj_canvas.asp
source code:
https://github.com/brook-kuo/JavaScript/tree/master/html5/canvas