HTML5學習手筆二:canvasAPI繪製樹形圖案A
上篇通過對canvas 畫對角線,瞭解了一些canvas畫圖基本原理。現在可以利用HTML5 canvas API建立一個場景:帶有長跑跑道的樹林。
本篇大綱
- 用canvas API繪製樹木的樹冠
- 為樹冠的邊框架加粗並且填充樹冠顏色
- 為樹冠創造一個強大的樹幹
- 繪製跑道
用canvas API繪製樹木的樹冠
原理還是與上篇畫對角線一樣,只是步驟增多而已,先看程式碼:
function createCanopyPath(context){
context.beginPath();
context.moveTo(-25,-50);
context.lineTo(-10,-80);
context.lineTo(-20,-80);
context.lineTo(-5,-110);
context.lineTo(-15,-110);
context.lineTo(0,-140);
context.lineTo(15,-110);
context.lineTo(5,-110);
context.lineTo(20,-80);
context.lineTo(10,-80);
context.lineTo(25,-50);
context.closePath();
}
function drawTrails(){
var canvas=document.getElementById(`diagonal`);
var context=canvas.getContext(`2d`);
context.save();
context.translate(130,250);
createCanopyPath(context);
context.stroke();
context.restore();
}
window.addEventListener(“load”,drawTrails,true);
</script>
DEMO效果如下:
上面的程式碼中有一個特殊的函式叫做closePath。這個函式的行為同lineTo很像,唯一的差別在於closePath會將路徑的起始座標自動作為目標座標。closePath還會通知canvas當前繪製的圖形己經閉合或者形成了完全封閉的區域。
為樹冠的邊框架加粗並且填充樹冠顏色
為了使樹冠更加形象並且看起來像真的樹,不得不利用canvas 的API繪製其圖形外觀,程式碼如下:
var context=canvas.getContext(`2d`);
context.save();
context.translate(130,250);
createCanopyPath(context);
//加寬線條
context.lineWidth=4;
//平滑路徑的接合點
context.lineJoin=`round`;
//將顏色改成棕色
context.strokeStyle=`#663300`;
//將填充色設定為綠色並填充樹冠
context.fillStyle=`#339900`;
context.fill();
context.stroke();
context.restore();
}
DEMO效果見下面執行效果:
lineJoin屬性設定為round,這是修改當前形狀中線段的連線方式,讓拐角變得更加油;也可以把lineJoin屬性設定成bevel或者miter來變換拐角樣式。
strokeStyle屬性是為了改變線條顏色。
fillStyle屬性是為了設定填充顏色
context 的fill 函式是為了可以讓canvas對當前圖形中所有的閉合路徑內部的畫素點進行填充,配合fillStyle 填充內部像形點顏色。
為樹冠創造一個強大的樹幹
建立樹幹有兩種方法:
- 用我們上面學過的使用線條然後配合closePath畫樹幹
- HTML5 提供了一個強大的填充矩形的函式 fillRect 可以畫一塊矩形x軸、y軸、需要畫的寬度和高度即可
在這裡我們使用fillRect 來構建樹幹。程式碼如下:
context.fillRect(-5,-50,10,50);
效果DEMO如下:
與fillRect相關的函式還有:strokeRect和clearRect。strokeRect的作用是基於給出的位置和座標畫出矩形的輪廓,clearRect的作用是清除矩形區域內的所有內容並將它恢復到初始狀態,即透明。
繪製跑道
完成本篇最後一個功能,在小樹旁邊畫上一個跑道。程式碼如下:
var canvas=document.getElementById(`diagonal`);
var context=canvas.getContext(`2d`);
context.save();
context.translate(130,250);
createCanopyPath(context);
//加寬線條
context.lineWidth=4;
//平滑路徑的接合點
context.lineJoin=`round`;
//將顏色改成棕色
context.strokeStyle=`#663300`;
//將填充色設定為綠色並填充樹冠
context.fillStyle=`#339900`;
context.fill();
context.fillStyle=`#663300`;
context.fillRect(-5,-50,10,50);
context.stroke();
context.restore();
context.save();
context.translate(-10,350);
context.beginPath();
context.moveTo(0,0);
//第一條曲線向右上方彎曲
context.quadraticCurveTo(170,-50,260,-190);
//第二條曲線向右下方彎曲
context.quadraticCurveTo(310,-250,410,-250);
context.strokeStyle=`#663300`;
context.lineWidth=20;
context.stroke();
context.restore();
}
quadraticCurveTo函式繪製曲線的起點是當前座標,帶有兩組(x,y)引數。第二組是指曲線的終點。第一組代表控制點。所謂的控制點位於曲線的旁邊,其作用相當於對曲線產生一個拉力。通過高速控制點的位置,就可以改變曲線的曲率。在右上方再畫一條一樣的曲線,以形成一條路。DEMO效果如下:
與quadraticCureTo函式一樣的曲線功能還涉及:bezierCurveTo、arcTo和arc函式。這些函式通過多種控制點(如半徑、角度和等)讓曲線更具可塑性。
本文轉自 terry_龍 51CTO部落格,原文連結:http://blog.51cto.com/terryblog/798910,如需轉載請自行聯絡原作者
相關文章
- 繪製圖形
- MATLAB圖形繪製練習(一)Matlab
- 利用 Matplotlib 繪製資料圖形(二)
- CSS3繪製圖形圖案效果CSSS3
- matplotlib繪製圖形
- java:繪製圖形Java
- Android OpenGL ES 開發(二):繪製圖形Android
- 圖形學學習筆記二:觀測變換筆記
- 安卓學習筆記31:使用自定義檢視繪製文字、圖形與影像安卓筆記
- css繪製特殊圖形CSS
- 使用css繪製圖形CSS
- 用HTML5繪製圖形在手機上消除模糊顯示HTML
- OpenGL 學習系列---基本形狀的繪製
- Shader 繪製基礎圖形
- 分段函式圖形繪製函式
- CAD有趣圖形的繪製
- js如何讀取excel檔案,繪製echarts圖形。JSExcelEcharts
- canvas繪製圖片drawImage學習Canvas
- Unreal學習筆記2-繪製簡單三角形Unreal筆記
- 2018.03.15、View 繪製流程學習 筆記View筆記
- Excalidraw:繪製圖形的新利器
- 二叉樹學習筆記二叉樹筆記
- Python例項:僅繪製圖例而不繪製實際的圖形Python
- 使用Matplotlib繪製3D圖形3D
- 利用 Matplotlib 繪製資料圖形(一)
- canvas核心技術-如何繪製圖形Canvas
- CSS繪製各種幾何圖形形狀效果CSS
- 學習OpenGL ES之繪製三角形
- Unity3D學習筆記1——繪製一個三角形Unity3D筆記
- Python學習筆記:過濾N位數並繪製折線圖Python筆記
- 使用clay.js繪製一棵圓形樹JS
- js讀取excel檔案,繪製echarts圖形---資料處理JSExcelEcharts
- 標準圓形餅圖Python繪製方法Python
- Python 用 OpenCV 繪製基本圖形系列(總)PythonOpenCV
- Markdown繪製各種圖形———Mermaid語法AI
- WPF基礎:在Canvas上繪製圖形Canvas
- VC++儲存繪製的圖形-1C++
- HTML5 Canvas(實戰:繪製餅圖2 Tooltip)HTMLCanvas
- 好程式設計師web前端學習路線分享純css繪製各種圖形程式設計師Web前端CSS