web 畫布

在web頁面增加畫布
<canvas id="lookwhatIdrew" width="600" height="200"></canvas>
  • canvas(畫布)元素是一個(gè)正常的HTML元素,首先是一個(gè)開始<canvas>標(biāo)記。
  • 我們增加一個(gè)id來標(biāo)識這個(gè)畫布,稍后會看到如何使用這個(gè)id
  • width屬性定義它在web頁面中水平方向占多少個(gè)像素。
  • height定義它所占的頁面垂直區(qū)域。

畫布四周可以環(huán)繞HTML,畫布與其他元素沒有什么不同。

  • 一個(gè)頁面可以有多個(gè)畫布,你可以為每個(gè)畫布指定一個(gè)唯一的id,這樣能夠?qū)⑺鼈冏鳛槲ㄒ坏漠嫴紒磉M(jìn)行繪制。

在畫布上繪制四方形

我們使用javascript在畫布上面繪制一個(gè)x=10 y=10 長寬都是100px的圖片

<script>
    window.onload = function() {
       var canvas = document.getElementById("lookwhatIdrew");
       var context = canvas.getContext("2d");
       context.fillRect(10,10,100,100);
    };
</script>
  • 首先需要通過畫布的id獲取畫布的引用。
  • 我們需要通過畫布的一個(gè)“2d”上下文來具體繪制
  • 矩形的填充默認(rèn)是黑色。通過fillRect來進(jìn)行填充??梢酝ㄟ^fillStyle屬性改變默認(rèn)填充色。context.fillStyle = "lightblue"

如果使用代碼來檢測瀏覽器是否支持畫布,需要使用canvas對象中是否存在getContext方法,如下;

var convas = document.getElementById("lookwhatIdrew");
if(canvas.getContext) {
    //you have canvas
}else {
    //sorry no canvas API support
}

注意:我們并沒有調(diào)用getContext這個(gè)方法,只是查看它是否有值,所以不使用canvas.getContext().

如果沒有提供畫布元素支持,你可以向用戶發(fā)送一個(gè)有好的消息,告訴他們應(yīng)該升級。瀏覽器看到一個(gè)它不認(rèn)識的元素,默認(rèn)行為就是顯示其中包含的文本。所以,不支持畫布的瀏覽器看到<canvas>元素時(shí),它就顯示其中的文本,如下:

<canvas id="lookwhatIdrew" width="600" height="200">
  Hey you, you, upgrade your browser !!
</canvas>

在畫布上繪制三角形
  1. 使用beginPath方法告訴畫布我們要開始一個(gè)新路徑
context.beginPath();
  1. 使用moveTo方法把“鉛筆”移動到畫布上的一個(gè)指定點(diǎn),可以認(rèn)為把鉛筆放在這一點(diǎn)上。
context.moveTo(100, 150);
  1. lineTo方法描述路徑,從鉛筆的當(dāng)前位置描到畫布上的另一個(gè)點(diǎn)。
context.lineTo(250, 70);
  1. 我們已經(jīng)完成三角形的第一條邊,現(xiàn)在再來畫第二條線。
context.lineTo(125, 30);
  1. 使用closePath方法閉合路徑。
context.closePath();
  1. 設(shè)置線寬
context.lineWidth  = 5;
  1. 用線描述路徑
context.stroke();

8 .設(shè)置顏色用來紅色填充三角形

context.fillStyle = "red";

9 .填充三角形

context.fill();

在畫布上繪制圓形
  1. 使用beginPath方法告訴畫布我們要開始一個(gè)新路徑
context.beginPath();
  1. 使用arc方法來繪制圓形
context.arc(150, 150, 50, 0, 2 *Math.PI, true);

3 .設(shè)置顏色用來紅色填充圓形

context.fillStyle = "red";

4 .填充圓形

context.fill();

下面深入分析arc方法,查看它的各個(gè)參數(shù):

context.arc(x, y, radius, startAngle, endAngle, direction);
  • x和y參數(shù)確定圓心在畫布上的位置。
  • radius這個(gè)參數(shù)指定圓的半徑(寬度的1/2)
  • startAngle,endAngle表示弧的起始角和終止角來確定圓上的起點(diǎn)和終點(diǎn)。
  • diretion是布爾值,如果為true,就表示逆時(shí)針畫弧。如果為false,則表示順時(shí)針畫弧。而角度是從右邊中間位置開始算0度,所以這個(gè)需要注意。

使用度轉(zhuǎn)化為弧度封裝的方法

function degreesToRadians(degrees) {
    return (degrees * Math.PI)/180;
}

在畫布中添加文本
context = canvas.getContext("2d");
context.fillStyle = "red";
context.font = "bold 1em sans-serif";
context.textAlign = "left";
context.fillText = ("Hello world", 20, 40); //20 40是開始點(diǎn)

在畫布中添加圖片
  1. 首先需要一張圖片,要把這個(gè)圖像放在畫布上,需要一個(gè)javaScript image對象??梢酝ㄟ^下面方法得到:
var twitterBird = new Image();
twitterBird.src = "twitterBird.png";
  1. 使用一個(gè)上下文方法在畫布上繪制這個(gè)圖像,通過方法drawImage方法
context.drawImage(twitterBird, 20, 120, 70, 70);
//20 ,20 是指定的x y 的位置
// 70 ,70是寬和高
  1. 關(guān)于圖像還有一點(diǎn)需要知道,圖像并不總會立即加載,所以在繪制圖像之前需要確保圖像已經(jīng)完全加載。要實(shí)現(xiàn)一個(gè)onload處理程序:
twitterBird.onload = function() {
    context.drawImage(twitterBird, 20, 120, 70, 70);
}

把畫布轉(zhuǎn)化為圖片
function makeImage() {
    var canvas = document.getElementById("tshirtCanvas");
    canvas.onclick = function() {
       window.location = canvase.toDataURL("image/png");  
    };
}



知行辦公,專業(yè)移動辦公平臺https://zx.naton.cn/
【總監(jiān)】十二春秋之,3483099@qq.com
【Master】zelo,616701261@qq.com;
【運(yùn)營】運(yùn)維艄公,897221533@qq.com;****
【產(chǎn)品設(shè)計(jì)】流浪貓,364994559@qq.com;
【體驗(yàn)設(shè)計(jì)】兜兜,2435632247@qq.com
【iOS】淘碼小工,492395860@qq.comiMcG33K,imcg33k@gmail.com
【Android】人猿居士,1059604515@qq.com;思路的頓悟,1217022114@qq.com
【java】首席工程師MR_W,feixue300@qq.com;
【測試】土鏡問道,847071279@qq.com;
【數(shù)據(jù)】fox009521,42151960@qq.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,143評論 25 708
  • 一:canvas簡介 1.1什么是canvas? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,882評論 2 32
  • --繪圖與濾鏡全面解析 概述 在iOS中可以很容易的開發(fā)出絢麗的界面效果,一方面得益于成功系統(tǒng)的設(shè)計(jì),另一方面得益...
    韓七夏閱讀 2,981評論 2 10
  • 一、簡介 HTML5 中的定義:“它是依賴分辨率的位圖畫布,你可以在 canvas 上面繪制任何圖形,甚至加載照片...
    destiny0904閱讀 10,843評論 1 4
  • 1、原型:一句話,這個(gè)東西是為了做屬性和方法共享的 怎么理解呢? 一般我們新建對象的時(shí)候是這樣的: functio...
    狂瀾1991閱讀 249評論 0 2

友情鏈接更多精彩內(nèi)容