使用JavaScript模塊繪圖的好處在于可以利用模塊化開發,簡化代碼量,提高代碼復用率,以及方便模塊化結構調用。下面我們將具體介紹如何使用JavaScript模塊繪制圖形。
先看一個實例,繪制一個簡單的矩形:
var canvas=document.getElementById("myCanvas");
var ctx=canvas.getContext("2d");
ctx.beginPath();
ctx.rect(20,20,150,100);
ctx.stroke();
解釋一下這個代碼:
1. 通過document.getElementById()獲取到Canvas元素;
2. 通過getContext()方法獲取到canvas對象的上下文(context);
3. 使用beginPath()方法創建一個新路徑;
4. 使用rect()方法創建一個矩形路徑;
5. 使用stroke()方法繪制出邊框。
接下來,我們將利用模塊化重構上面的例子。var MyCanvas = MyCanvas || {};
MyCanvas.drawRect = (function () {
return function (canvas_id, x, y, w, h, color) {
var canvas = document.getElementById(canvas_id);
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.rect(x, y, w, h);
ctx.fillStyle = color;
ctx.fill();
}
})();
代碼解釋:
1. 使用模塊化技術建立了一個MyCanvas的命名空間,用于存放所有的canvas相關API;
2. 使用立即執行函數返回一個繪制矩形的函數;
3. 函數的參數包括canvas的id,矩形xy坐標,寬高,以及填充顏色;
4. 在函數內獲取canvas對象和上下文,并進行繪圖。
現在可以像這樣調用我們的模塊:MyCanvas.drawRect("myCanvas", 20, 20, 150, 100, "#f00");
這個模塊化的方式可以大大提高代碼的復用率,也可以讓代碼更易于維護。
在模塊化開發中,我們可以進一步拆分繪圖API。例如,可以使用一個專門的API處理繪制線段:MyCanvas.drawLine = (function () {
return function (canvas_id, startX, startY, endX, endY, lineColor, lineWidth) {
var canvas = document.getElementById(canvas_id);
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(startX, startY);
ctx.lineTo(endX, endY);
ctx.strokeStyle = lineColor;
ctx.lineWidth = lineWidth;
ctx.stroke();
}
})();
我們還可以使用requestAnimationFrame() API,將一個函數添加到瀏覽器的動畫幀隊列中(例如,重繪動畫):MyCanvas.createAnimation = (function () {
var requestId;
var delta = 0;
var lastCalledTime = Date.now();
var fps;
function animate() {
requestId = window.requestAnimationFrame(animate);
var now = Date.now();
delta = now - lastCalledTime;
lastCalledTime = now;
fps = Math.round(1000 / delta);
console.log("FPS: " + fps);
// 在此編寫繪圖代碼
}
return function (canvas_id) {
var canvas = document.getElementById(canvas_id);
var ctx = canvas.getContext("2d");
requestId = window.requestAnimationFrame(animate);
}
})();
我們還可以使用require.js 或 browserify 這樣的工具提供的模塊加載器,來更好地控制繪圖API的加載方式、加載時機等。
最后,可以使用canvas繪制出各種復雜的圖形,例如任意多邊形、圓弧、曲線等。
使用JavaScript模塊化編程方法,能夠大大降低程序耦合,提高代碼復用率。如果合理地組織數據和方法,我們可以發揮canvas繪圖的強大功能,實現各種流程圖、地圖、二維碼等圖形的繪制。