<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • HTML5教程:畫布Canvas基礎(chǔ)知識講解

    時間:2024-10-07 03:37:00 HTML5 我要投稿
    • 相關(guān)推薦

    HTML5教程:畫布Canvas基礎(chǔ)知識講解

      Canvas是HTML5最讓人期待的特性之一,目前已獲得大部分Web瀏覽器支持Canvas可以幫助創(chuàng)建游戲、增強(qiáng)圖形用戶界面。下面YJBYS小編為大家?guī)懋嫴糃anvas基礎(chǔ)知識,希望對大家學(xué)習(xí)有所幫助!

    HTML5教程:畫布Canvas基礎(chǔ)知識講解

      HTML5規(guī)范引進(jìn)了很多新特性,其中最令人期待的之一就是Canvas元素。HTML5 Canvas提供了通過JavaScript繪制圖形的方法,此方法使用簡單但功能強(qiáng)大。每一個Canvas元素都有一個“上下文(context)” (想象成繪圖板上的一頁),在其中可以繪制任意圖形。瀏覽器支持多個Canvas上下文,并通過不同的API提供圖形繪制功能。

      大部分的瀏覽器都支持2D Canvas上下文——包括Opera,F(xiàn)irefox,Konqueror和Safari。而且某些版本的Opera還支持3D Canvas,F(xiàn)irefox也可以通過插件形式支持 3D Canvas。

      本文介紹主要介紹2D Canvas基礎(chǔ)以及如何使用基本Canvas函數(shù),如線條、形狀、圖像和文字等。為了理解此文章,你最好了解JavaScript基礎(chǔ)知識。

      下面開始我們的講解:

      canvas基礎(chǔ)

      創(chuàng)建Canvas的方法很簡單,只需要在HTML頁面中添加元素就可以了:

    1 <canvas id="myCanvas" width="300" height="300">
    2 這是一個Canvas標(biāo)簽案例
    3 </canvas>

      為了能在JavaScript中引用Canvas,最好給它設(shè)置ID ;也需要給Canvas設(shè)定高度和寬度。

      要在Canvas畫布中繪制圖形需要使用JavaScript。首先通過getElementById函數(shù)找到Canvas元素,然后初始化上下文,之后可以使用上下文API繪制各種圖形。下面的腳本可以在Canvas中繪制一個矩形:

    1 var elem = document.getElementById('myCanvas');
    2 if (elem && elem.getContext) {
    3 var context = elem.getContext('2d');
    4 if (context) {
    5 context.fillRect(0, 0, 150, 100);
    6 }
    7 }

      可以把上面代碼放置在文檔head部分中,或者放在外部JavaScript文件中。

      2D context API

      介紹了如何創(chuàng)建Canvas后,讓我們來看看2D Canvas API,看看能用這些函數(shù)做些什么。

      在上面的例子中,我們展示了繪制矩形是多么簡單,而通過fillStyle和strokeStyle屬性可以更輕松的設(shè)置矩形的填充和線條。顏色值使用方法和CSS一樣:十六進(jìn)制數(shù)、rgb()、rgba() 和hsla()。

      通過fillRect可以繪制帶填充的矩形;使用strokeRect可以繪制只有邊框沒有填充的矩形。如果想清除部分Canvas可以使用 clearRect。上述三個方法的參數(shù)相同:x, y, width, height。前兩個參數(shù)設(shè)定 (x,y) 坐標(biāo),后兩個參數(shù)設(shè)置矩形的高度和寬度。

      下面將是一個綜合實例的JavaScript腳本:

    1 context.fillStyle = '#00f';
    2 context.strokeStyle = '#f00';
    3 context.lineWidth = 4;
    4 context.fillRect (0, 0, 150, 50);
    5 context.strokeRect(0, 60, 150, 50);
    6 context.clearRect (30, 25, 90, 60);
    7 context.strokeRect(30, 25, 90, 60);

      可以把上面代碼放置在文檔head部分中,或者放在外部JavaScript文件中。

      路徑

      通過Canvas路徑(path)可以繪制任意形狀。可以先繪制輪廓,然后繪制邊框和填充。創(chuàng)建自定義形狀很簡單,使用beginPath()開始 繪制,然后使用直線、曲線和其他圖形繪制你的圖形。繪制完畢后調(diào)用fill和stroke即可添加填充或者設(shè)置邊框。調(diào)用 closePath()結(jié)束自定義圖形繪制。

      下面是一個繪制三角的案例的JavaScript腳本:

    1 context.fillStyle = '#00f';
    2 context.strokeStyle = '#f00';
    3 context.lineWidth = 4;
    4 context.beginPath();
    5 context.moveTo(10, 10);
    6 context.lineTo(100, 10);
    7 context.lineTo(10, 100);
    8 context.lineTo(10, 10);
    9 context.fill();
    10 context.stroke();
    11 context.closePath();

      可以把上面代碼放置在文檔head部分中,或者放在外部JavaScript文件中。

      插入圖像

      drawImage方法允許在Canvas中插入其他圖像(img和Canvas元素) 。在Opera中可以在Canvas中繪制SVG圖形。此方法比較復(fù)雜,可以有3個、5個或9個參數(shù):

      3個參數(shù):最基本的drawImage使用方法。一個參數(shù)指定圖像位置,另兩個參數(shù)設(shè)置圖像在Canvas中的位置。

      5個參數(shù):中級的drawImage使用方法,包括上面所述3個參數(shù),加兩個參數(shù)指明插入圖像寬度和高度 (如果你想改變圖像大小)。

      9個參數(shù):最復(fù)雜drawImage雜使用方法,包含上述5個參數(shù)外,另外4個參數(shù)設(shè)置源圖像中的位置和高度寬度。這些參數(shù)允許你在顯示圖像前動態(tài)裁剪源圖像。

      下面是上述三個使用方法的例子:

    1 context.drawImage(img_elem, dx, dy);
    2 context.drawImage(img_elem, dx, dy, dw, dh);
    3 context.drawImage(img_elem, sx, sy, sw, sh, dx, dy, dw, dh);

      可以把上面代碼放置在文檔head部分中,或者放在外部JavaScript文件中。

      像素級操作

      2D Context API提供了三個方法用于像素級操作:createImageData,getImageData和putImageData。

      ImageData對象保存了圖像像素值。每個對象有三個屬性: width,height和data。data屬性類型為CanvasPixelArray,用于儲存width*height*4個像素值。每一個像素 有RGB值和透明度alpha值(其值為0至255,包括alpha在內(nèi)。)。像素的順序從左至右,從上到下,按行存儲。

      來看一個例子:

    1 var imgd = context.createImageData(50,50);
    2 var pix = imgd.data;
    3 for (var i = 0; n = pix.length, i < n; i += 4) {
    4 pix[i ] = 255;
    5 pix[i+3] = 127;
    6 }
    7 context.putImageData(imgd, 0,0);

      注意:不是所有瀏覽器都實現(xiàn)了createImageData。在支持的瀏覽器中,需要通過getImageData方法獲取ImageData對象。

      通過ImageData可以完成很多功能。如可以實現(xiàn)圖像濾鏡,或可以實現(xiàn)數(shù)學(xué)可視化 (如分形和其他特效)。來看一個實例:

    1 var imgd = context.getImageData(x, y width, height);
    2 var pix = imgd.data;
    3 for (var i = 0, n = pix.length; i < n; i += 4) {
    4 pix[i ] = 255 - pix[i ];
    5 pix[i+1] = 255 - pix[i+1];
    6 pix[i+2] = 255 - pix[i+2];
    7 }
    8 context.putImageData(imgd,x, y);

      可以把上面代碼放置在文檔head部分中,或者放在外部JavaScript文件中。

      文字

      雖然最近的WebKit版本和Firefox 3.1 nightly build才開始支持Text API,為了保證文章完整性我決定仍在這里介紹文字API。

      context對象可以設(shè)置以下text屬性:

      font:文字字體,同CSS font-family屬性;

      textAlign:文字水平對齊方式。可取屬性值: start,end,left,right,center。默認(rèn)值:start;

      textBaseline:文字豎直對齊方式。可取屬性值:top,hanging,middle,alphabetic,ideographic,bottom。默認(rèn)值:alphabetic。

      有兩個方法可以繪制文字:fillText和strokeText。第一個繪制帶fillStyle填充的文字,后者繪制只有 strokeStyle邊框的文字。兩者的參數(shù)相同:要繪制的文字和文字的位置(x,y)坐標(biāo)。還有一個可選選項——最大寬度。如果需要的話,瀏覽器會縮 減文字以讓它適應(yīng)指定寬度。

      文字對齊屬性影響文字與設(shè)置的(x,y)坐標(biāo)的相對位置。

    1 ontext.fillStyle = '#00f';
    2 context.font = 'italic 30px sans-serif';
    3 context.textBaseline = 'top';
    4 context.fillText ('Hello world!', 0, 0);
    5 context.font = 'bold 30px sans-serif';
    6 context.strokeText('Hello world!', 0, 50);

      可以把上面代碼放置在文檔head部分中,或者放在外部JavaScript文件中。

      陰影

      目前只有Konqueror和Firefox 3.1 nightly build支持Shadows API。API的屬性為:shadowColor:陰影顏色。其值和CSS顏色值一致。

      shadowBlur:設(shè)置陰影模糊程度。此值越大,陰影越模糊。其效果和Photoshop的高斯模糊濾鏡相同。

      shadowOffsetX和shadowOffsetY:陰影的x和y偏移量,單位是像素。

    1 context.shadowOffsetX = 5;
    2 context.shadowOffsetY = 5;
    3 context.shadowBlur = 4;
    4 context.shadowColor = 'rgba(255, 0, 0, 0.5)';
    5 context.fillStyle = '#00f';
    6 context.fillRect(20, 20, 150, 100);

      可以把上面代碼放置在文檔head部分中,或者放在外部JavaScript文件中。

      顏色漸變

      除了CSS顏色, fillStyle和strokeStyle屬性可以設(shè)置為CanvasGradient對象。——通過CanvasGradient可以為線條和填充使用顏色漸變。

      欲創(chuàng)建CanvasGradient對象,可以使用兩個方法:createLinearGradient和createRadialGradient。前者創(chuàng)建線性顏色漸變,后者創(chuàng)建圓形顏色漸變。

      創(chuàng)建顏色漸變對象后,可以使用對象的addColorStop方法添加顏色中間值。

      下面的代碼演示了顏色漸變使用方法:

    1 var gradient1 = context.createLinearGradient(sx,sy,dx,dy);
    2 gradient1.addColorStop(0, '#f00');
    3 gradient1.addColorStop(0.5, '#ff0');
    4 gradient1.addColorStop(1, '#00f');
    5 var gradient2 = context.createRadialGradient(sx,sy,sr,dx,dy, dr);

      可以把上面代碼放置在文檔head部分中,或者放在外部JavaScript文件中。

    【HTML5教程:畫布Canvas基礎(chǔ)知識講解】相關(guān)文章:

    攝影基礎(chǔ)知識教程09-05

    韓語發(fā)音語法基礎(chǔ)知識講解10-13

    美術(shù)素描靜物基礎(chǔ)知識教程07-14

    2017年最新證券從業(yè)資格基礎(chǔ)知識講解09-12

    畫布為什么要做底子?01-13

    2017年造價員考試《基礎(chǔ)知識》輔導(dǎo)講解09-08

    最新貨物集裝箱運輸基礎(chǔ)知識講解07-18

    平面設(shè)計基礎(chǔ)知識色彩搭配知識點講解08-29

    2017年造價員考試《基礎(chǔ)知識》復(fù)習(xí)輔導(dǎo)講解10-23

    HTML5的發(fā)展08-15

    主站蜘蛛池模板: 久久亚洲日韩精品一区二区三区| 97久久超碰成人精品网站| 亚洲中文字幕无码久久精品1| 国产成人精品免费视频网页大全| 蜜臀精品无码AV在线播放 | 国产AⅤ精品一区二区三区久久| 亚洲国产一成久久精品国产成人综合 | 久久精品亚洲精品国产欧美| 久久99国产精品99久久| 精品久久无码中文字幕| 中文字幕精品一区二区三区视频| 久久99热这里只有精品国产| 国产A√精品区二区三区四区| 欧美黑人巨大精品| 国产AV无码专区亚洲精品| 亚洲韩国精品无码一区二区三区| 97精品伊人久久大香线蕉app| 99视频在线精品国自产拍亚瑟| 久久国产精品成人片免费| 亚洲国产一成久久精品国产成人综合| 精品无码三级在线观看视频| 国产精品国产三级国产a| 777被窝午夜精品影院| 国产偷亚洲偷欧美偷精品 | 久久国产免费观看精品| 国产在线精品一区二区中文| 亚洲精品无码av人在线观看| 久久人人超碰精品CAOPOREN| 国产精品成人小电影在线观看| 久久久久夜夜夜精品国产| 国产精品臀控福利在线观看 | 国产在线不卡午夜精品2021| 国产成人精品日本亚洲网站 | 久久91精品国产91久久小草 | 久久丝袜精品中文字幕| 久久99亚洲综合精品首页| 精品国产爽爽AV| 免费精品国产自产拍在线观看| 久久精品国产亚洲Aⅴ蜜臀色欲| 麻豆精品视频在线观看91| 久久精品这里只有精99品|