<canvas></canvas> 英 ['kænvəs] 美 ['kænvəs] 帆布 畫布
畫布
,能夠用 JavaScript 在上面繪畫。控制其每個像素。遊戲:canvas 在基於 Web 的圖像顯示方面比 Flash 更加立體、更加精巧,canvas 遊戲在流暢度和跨平臺方面更牛。
25 超棒的 HTML5 Canvas 遊戲javascript
可視化數據.數據圖表話,好比:百度的 echartphp
banner 廣告:Flash 曾經輝煌的時代,智能手機還不曾出現。如今以及將來的智能機時代,HTML5 技術可以在 banner 廣告上發揮巨大做用,用 Canvas 實現動態的廣告效果再合適不過。css
將來=> 模擬器:不管從視覺效果仍是核心功能方面來講,模擬器產品能夠徹底由 JavaScript 來實現。html
將來=> 遠程計算機控制:Canvas 可讓開發者更好地實現基於 Web 的數據傳輸,構建一個完美的可視化控制界面。前端
將來=> 圖形編輯器:Photoshop 圖形編輯器將可以 100%基於 Web 實現。html5
其餘可嵌入網站的內容(多用於活動頁面、特效):相似圖表、音頻、視頻,還有許多元素可以更好地與 Web 融合,而且不須要任何插件。java
完整的 canvas 移動化應用python
咱們課程的目標git
咱們課程的案例和項目演示github
canvas 的標準:
* 最新標準:[http://www.w3.org/TR/2dcontext/](http://www.w3.org/TR/2dcontext/) * 穩定版本的標準:[http://www.w3.org/TR/2013/CR-2dcontext-20130806/](http://www.w3.org/TR/2013/CR-2dcontext-20130806/) * 目前來講,標準還在完善中。先用早期的 api 足夠完成全部的應用
推薦:
安裝插件:AndyJS2
github地址: https://github.com/malun666/AndyJS2 直接下載到:X:\Users\用戶名\AppData\Roaming\Sublime Text 3\Packages
例如:
<canvas id="cavsElem"> 你的瀏覽器不支持canvas,請升級瀏覽器.瀏覽器不支持,顯示此行文本 </canvas>
var canvas = document.getElementById('cavsElem'); //得到畫布 var ctx = canvas.getContext('2d'); //注意:2d小寫, 3d:webgl
canvas 座標系,從最左上角 0,0 開始。x 向右增大, y 向下增大
* 語法:ctx.moveTo(x, y); * 解釋:設置上下文繪製路徑的起點。至關於移動畫筆到某個位置 * 參數:x,y 都是相對於 canvas盒子的最左上角。 * 注意:**繪製線段前必須先設置起點。**
* 語法:ctx.lineTo(x, y); * 解釋:從x,y的位置繪製一條直線到起點或者上一個線頭點。 * 參數:x,y 線頭點座標。
* 開始路徑:ctx.beginPath(); * 閉合路徑:ctx.closePath(); * 解釋:若是是繪製不一樣狀態的線段或者形狀,必須使用開始新路徑的方法把不一樣的繪製操做隔開。閉合路徑會自動把最後的線頭和開始的線頭連在一塊兒。 * beginPath: 核心的做用是將 不一樣繪製的形狀進行隔離, 每次執行此方法,表示從新繪製一個路徑,跟以前的繪製的墨跡能夠進行分開樣式設置和管理。
* 語法:ctx.stroke(); * 解釋:根據路徑繪製線。路徑只是草稿,真正繪製線必須執行stroke * stroke: (用筆等)畫;輕撫;輕挪;敲擊;劃尾槳;劃掉;(打字時)擊打鍵盤 英 [strəʊk] 美 [strok]
html 部分:
<canvas id="cavsElem"> 你的瀏覽器不支持canvas,請升級瀏覽器 </canvas>
javascript 部分:
//===============基本繪製api==================== //得到畫布 var canvas = document.querySelector('#cavsElem'); var ctx = canvas.getContext('2d'); //得到上下文 canvas.width = 900; //設置標籤的屬性寬高 canvas.height = 600; //千萬不要用 canvas.style.height canvas.style.border = '1px solid #000'; //繪製三角形 ctx.beginPath(); //開始路徑 ctx.moveTo(100, 100); //三角形,左頂點 ctx.lineTo(300, 100); //右頂點 ctx.lineTo(300, 300); //底部的點 ctx.closePath(); //結束路徑 ctx.stroke(); //描邊路徑
* 語法:ctx.fill(); * 解釋:填充,是將閉合的路徑的內容填充具體的顏色。默認黑色。 * 注意:交叉路徑的填充問題,「非零環繞原則」,順逆時針穿插次數決定是否填充。 如下是非0環繞原則的原理:(瞭解便可,很是少會用到複雜的路徑) 「非零環繞規則」是這麼來判斷有自我交叉狀況的路徑的:對於路徑中的任意給定區域,從該區域內部畫一條足夠長的線段, 使此線段的終點徹底落在路徑範圍以外。 圖2-14中的那三個箭頭所描述的就是上面這個步驟。 接下來,將計數器初始化爲0, 而後,每當這條線段與路徑上的直線或曲線相交時, 就改變計數器的值。若是是與路徑的順時針部分相交,則加1, 若是是與路徑的逆時針部分相交,則減1。若計數器的最終值不是0,那麼此區域就在路徑裏面,在調用fill()方法時, 瀏覽器就會對其進行填充。 若是最終值是0,那麼此區域就不在路徑內部,瀏覽器也就不會對其進行填充了 * 案例: 04填充矩形.html
* 語法:ctx.rect(x, y, width, height); * 解釋:x, y是矩形左上角座標, width和height都是以像素計 * rect方法只是規劃了矩形的路徑,並無填充和描邊。 * 改造案例:04填充矩形.html *rect: abbr. 矩形(rectangular);收據(receipt)
* 語法: ctx.strokeRect(x, y, width, height); - 參數跟2.3.8相同,注意此方法繪製完路徑後當即進行stroke繪製 * 語法:ctx.fillRect(x, y, width, height); - 參數跟2.3.8相同, 此方法執行完成後。當即對當前矩形進行fill填充。
* 語法:ctx.clearRect(x, y, width, hegiht); * 解釋:清除某個矩形內的繪製的內容,至關於橡皮擦。
概述:arc() 方法建立弧/曲線(用於建立圓或部分圓)。
rad = deg\*Math.PI/180;
案例:05 繪製圓形.html
案例:06 繪製餅狀圖.html
例如:ctx.font = "18px '微軟雅黑'";
例如:ctx.textAlign = 'left';
例如: ctx.textBaseline = 'top'; 單詞: alphabetic: 字母的;照字母次序的 [,ælfə'bɛtɪk] ideographic:表意的;表意字構成的 英 [,ɪdɪəʊ'ɡræfɪk] 美 [,ɪdɪə'græfɪk]
* ctx.fillText() 在畫布上繪製「被填充的」文本 * ctx.strokeText() 在畫布上繪製文本(無填充) * ctx.measureText() 返回包含指定文本寬度的對象 * 單詞:measure 測量;估量;權衡 英 ['meʒə] 美 ['mɛʒɚ]
//綜合案例代碼: ctx.moveTo(300, 300); ctx.fillStyle = 'purple'; //設置填充顏色爲紫色 ctx.font = '20px "微軟雅黑"'; //設置字體 ctx.textBaseline = 'bottom'; //設置字體底線對齊繪製基線 ctx.textAlign = 'left'; //設置字體對齊的方式 //ctx.strokeText( "left", 450, 400 ); ctx.fillText('Top-g', 100, 300); //填充文字
context.drawImage(img,x,y); 參數說明: x,y 繪製圖片左上角的座標, img是繪製圖片的dom對象。
context.drawImage(img,x,y,width,height);
參數說明:width 繪製圖片的寬度, height:繪製圖片的高度
若是指定寬高,最好成比例,否則圖片會被拉伸</em>
等比公式: toH = Height * toW / Width; //等比 設置高 = 原高度 * 設置寬/ 原寬度;
context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 參數說明: sx,sy 裁剪的左上角座標, swidth:裁剪圖片的高度。 sheight:裁剪的高度 其餘同上
第一種方式:
var img = document.getElementById('imgId');
第二種方式:
var img = new Image(); //這個就是 img標籤的dom對象 img.src = '/aicoder_vip_doc/images/arc.gif'; img.alt = '文本信息'; img.onload = function() { //圖片加載完成後,執行此方法 };
var o = { name: '123', age: 18 }; //json方式建立 var o = new Object(); //經過new的方式建立 var o = new Persion(); //經過類的構造函數建立
* json的方式: var o = { age: 19 }; * 直接添加屬性:var o = {}; o.age = 19;//太分散了,不利於管理 * 因爲js動態語言的特性,若是屬性不存在的時候,直接添加屬性。 * 構造函數添加屬性 * 原型添加公共的屬性
JS 的構造函數的原型 構造函數的原型就是:構造對象的模板,構造函數原型裏面的全部的屬性和方法都會共享給全部的 構造函數構造出來的全部實例。
第一步:sublime 菜單欄 → 工具 → 製做代碼段
第二步:修改輸出的 sublime 代碼段文本
<snippet> <content><![CDATA[ 一、這裏放要tab鍵 輸出的內容 二、 ${1:this} 佔位符,tab能夠進行切換,數字是切換的索引。 :後面的是默認的文本。 ]]></content> <!-- Optional: Set a tabTrigger to define how to trigger the snippet --> <tabTrigger>簡寫的字母</tabTrigger> <!-- Optional: Set a scope to limit where the snippet will trigger --> <!-- <scope>source.python</scope> --> </snippet>
第三步:保存到插件的文件夾中,後綴名爲:.sublime-snippet 好比我存放的位置:
C:\Users\malunmac\AppData\Roaming\Sublime Text 3\Packages\User\snippets
snippets 是我本身新建的文件夾。
配套視頻請戳:https://www.bilibili.com/video/av26151775/
關注AICODER官網: https://www.aicoder.com