【HTML5】HTML5Canvas繪畫API

一歉备、認(rèn)識Canvas

Canvas就是一個畫布,可以進(jìn)行畫任何的線磕洪、圖形吭练、填充等一系列的操作,而且操作的畫圖就是js析显,所以讓js編程到了嗑藥的地步鲫咽。另外Canvas不僅僅提供簡單的二維矢量繪圖签赃,也提供了三維的繪圖,以及圖片處理等一系列的api支持分尸。

二锦聊、Canvas的Context對象

1.要使用Canvas來繪制圖形必須在頁面中添加Canvas的標(biāo)簽。

<canvas id="demoCanvas" width="500" height="500">
    <p>
        請使用支持HTML5的瀏覽器查看本實(shí)例
    </p>
</canvas>

2.只有上面的標(biāo)簽箩绍,只能是創(chuàng)建好了一個畫布孔庭,其中width和height屬性就是設(shè)置畫布的大小。Id屬性也是必須的材蛛,后面要用Id來拿到當(dāng)前的Canvas的Dom對象圆到。通過此Canvase的Dom對象就可以獲取他的上下文(Context)了,Canvas繪制圖形都是靠著Canvas對象的上下文對象卑吭。

<script type="text/javascript">
    //第一步:獲取canvas元素
    var canvasDom = document.getElementById("demoCanvas");
    //第二步:獲取上下文
    var context = canvasDom.getContext('2d');
</script>

3.Context上下文默認(rèn)兩種繪制方式: 第一種:繪制線(stroke) 第二種:填充(fill)芽淡。

三、Canvas繪制立體透明矩形

1. Canvas繪制步驟:
  • 創(chuàng)建HTML頁面豆赏,設(shè)置畫布標(biāo)簽挣菲。
  • 編寫js,獲取畫布dom對象掷邦。
  • 通過canvas標(biāo)簽的Dom對象獲取上下文白胀。
  • 設(shè)置繪制樣式、顏色抚岗。
  • 繪制矩形或杠,或者填充矩形。
<body>
    <canvas id="demoCanvas" width="500" height="500">
        <p>請使用支持HTML5的瀏覽器查看本實(shí)例</p>
    </canvas>
    <!---下面將演示一種繪制矩形的demo--->
    <script type="text/javascript">
        //第一步:獲取canvas元素
        var canvasDom = document.getElementById("demoCanvas");
        //第二步:獲取上下文
        var context = canvasDom.getContext('2d');
        //第三步:指定繪制線樣式苟跪、顏色
        context.strokeStyle = "red";
        //第四步:繪制矩形廷痘,只有線蔓涧。內(nèi)容是空的
        context.strokeRect(10, 10, 190, 100);
        //以下演示填充矩形件已。
        context.fillStyle = "blue";
        context.fillRect(110,110,100,100);
    </script>
</body>

四、Canvas繪制線條

Context對象的beginPath方法表示開始繪制路徑元暴,moveTo(x, y)方法設(shè)置線段的起點(diǎn)篷扩,lineTo(x, y)方法設(shè)置線段的終點(diǎn),stroke方法用來給透明的線段著色茉盏。moveto和lineto方法可以多次使用鉴未。最后,還可以使用closePath方法鸠姨,自動繪制一條當(dāng)前點(diǎn)到起點(diǎn)的直線铜秆,形成一個封閉圖形,省卻使用一次lineto方法讶迁。

<body>
    <canvas id="demoCanvas" width="500" height="600">
    </canvas>
    <script type="text/javascript">
        //通過id獲得當(dāng)前的Canvas對象
        var canvasDom = document.getElementById("demoCanvas");
        //通過Canvas Dom對象獲取Context的對象
        var context = canvasDom.getContext("2d");
        context.beginPath(); // 開始路徑繪制
        context.moveTo(20, 20); // 設(shè)置路徑起點(diǎn)连茧,坐標(biāo)為(20,20)
        context.lineTo(200, 200); // 繪制一條到(200,20)的直線
        context.lineTo(400, 20);
        context.closePath();
        context.lineWidth = 2.0; // 設(shè)置線寬
        context.strokeStyle = "#CC0000"; // 設(shè)置線的顏色
        context.stroke(); // 進(jìn)行線的著色,這時整條線才變得可見
    </script>
</body>

五、Canvas繪制文本

Context上下文對象的fillText(string, x, y)方法是用來繪制文本啸驯,它的三個參數(shù)分別為文本內(nèi)容客扎、起點(diǎn)的x坐標(biāo)、y坐標(biāo)罚斗。使用之前徙鱼,需用font設(shè)置字體、大小针姿、樣式(寫法類似與CSS的font屬性)袱吆。與此類似的還有strokeText方法,用來添加空心字距淫。另外注意一點(diǎn):fillText方法不支持文本斷行杆故,即所有文本出現(xiàn)在一行內(nèi)。所以溉愁,如果要生成多行文本处铛,只有調(diào)用多次fillText方法。

<canvas id="demoCanvas" width="500" height="600"></canvas>
<script type="text/javascript">
    //通過id獲得當(dāng)前的Canvas對象
    var canvasDom = document.getElementById("demoCanvas");
    //通過Canvas Dom對象獲取Context的對象
    var context = canvasDom.getContext("2d");
    context.moveTo(200,200);
    // 設(shè)置字體
    context.font = "Bold 50px Arial";
    // 設(shè)置對齊方式
    context.textAlign = "left";
    // 設(shè)置填充顏色
    context.fillStyle = "#005600";
    // 設(shè)置字體內(nèi)容拐揭,以及在畫布上的位置
    context.fillText("老馬!", 10, 50);
    // 繪制空心字
    context.strokeText("blog.itjeek.com!", 10, 100);
</script>

六撤蟆、Canvas繪制圓形和橢圓

Context上下文的arc方法就是繪制圓形或者橢圓,arc方法的x和y參數(shù)是圓心坐標(biāo)堂污,radius是半徑家肯,startAngle和endAngle則是扇形的起始角度和終止角度(以弧度表示),anticlockwise表示做圖時應(yīng)該逆時針畫(true)還是順時針畫(false)盟猖。

<canvas id="demoCanvas" width="500" height="600"></canvas>
<script type="text/javascript">
    //通過id獲得當(dāng)前的Canvas對象
    var canvasDom = document.getElementById("demoCanvas");
    //通過Canvas Dom對象獲取Context的對象
    var context = canvasDom.getContext("2d");
    context.beginPath();//開始繪制路徑
    //繪制以 (60,60)為圓心讨衣,50為半徑長度,從0度到360度(PI是180度)式镐,最后一個參數(shù)代表順時針旋轉(zhuǎn)反镇。
    context.arc(60, 60, 50, 0, Math.PI * 2, true);
    context.lineWidth = 2.0;//線的寬度
    context.strokeStyle = "#000";//線的樣式
    context.stroke();//繪制空心的,當(dāng)然如果使用fill那就是填充了娘汞。
</script>

七歹茶、Canvas繪制圖片

Canvas繪制圖片應(yīng)該是他的一大特點(diǎn)或者是亮點(diǎn)吧。當(dāng)然配合File的API你弦,讓JS變得無可匹敵惊豺。那接下里給大家演示一下怎樣繪制圖片,并且做出一個立體效果出來禽作。

<canvas id="demoCanvas" width="500" height="600"></canvas>
<script type="text/javascript">
    //通過id獲得當(dāng)前的Canvas對象
    var canvasDom = document.getElementById("demoCanvas");
    //通過Canvas Dom對象獲取Context的對象
    var context = canvasDom.getContext("2d");
    var image = new Image();//創(chuàng)建一張圖片
    image.src = "Images/a.png";//設(shè)置圖片的路徑
    image.onload = function() {//當(dāng)圖片加載完成后
     for (var i = 0; i < 10; i++) {//輸出10張照片
            //參數(shù):(1)繪制的圖片  (2)坐標(biāo)x尸昧,(3)坐標(biāo)y
            context.drawImage(image, 100 + i * 80, 100 + i * 80);
        }
    };
</script>

八、Canvas3D繪制

Canvas3D繪制的相關(guān)內(nèi)容旷偿,關(guān)于Canvas繪制漸變色烹俗、繪制陰影碍沐、圖片的相關(guān)處理操作等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衷蜓,一起剝皮案震驚了整個濱河市累提,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磁浇,老刑警劉巖斋陪,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異置吓,居然都是意外死亡无虚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門衍锚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來友题,“玉大人,你說我怎么就攤上這事戴质《然拢” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵告匠,是天一觀的道長戈抄。 經(jīng)常有香客問我,道長后专,這世上最難降的妖魔是什么划鸽? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮戚哎,結(jié)果婚禮上裸诽,老公的妹妹穿的比我還像新娘。我一直安慰自己型凳,他們只是感情好丈冬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啰脚,像睡著了一般殷蛇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上橄浓,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音亮航,去河邊找鬼荸实。 笑死,一個胖子當(dāng)著我的面吹牛缴淋,可吹牛的內(nèi)容都是我干的准给。 我是一名探鬼主播泄朴,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼露氮!你這毒婦竟也來了祖灰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤畔规,失蹤者是張志新(化名)和其女友劉穎局扶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叁扫,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡三妈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了莫绣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畴蒲。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖对室,靈堂內(nèi)的尸體忽然破棺而出模燥,到底是詐尸還是另有隱情,我是刑警寧澤掩宜,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布涧窒,位于F島的核電站,受9級特大地震影響锭亏,放射性物質(zhì)發(fā)生泄漏纠吴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一慧瘤、第九天 我趴在偏房一處隱蔽的房頂上張望戴已。 院中可真熱鬧,春花似錦锅减、人聲如沸糖儡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽握联。三九已至,卻和暖如春每瞒,著一層夾襖步出監(jiān)牢的瞬間金闽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工剿骨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留代芜,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓浓利,卻偏偏與公主長得像挤庇,于是被迫代替她去往敵國和親钞速。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 一:canvas簡介 1.1什么是canvas嫡秕? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,674評論 2 32
  • 一渴语、canvas簡介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個矩形區(qū)...
    Looog閱讀 3,940評論 3 40
  • --繪圖與濾鏡全面解析 概述 在iOS中可以很容易的開發(fā)出絢麗的界面效果昆咽,一方面得益于成功系統(tǒng)的設(shè)計(jì)驾凶,另一方面得益...
    韓七夏閱讀 2,717評論 2 10
  • 神奇且強(qiáng)大的canvas 一.Canvas的基本介紹 1.什么是Canvas 定義:是HTML5提供的一種新標(biāo)簽,...
    Ainy塵世繁花終凋落閱讀 10,736評論 1 18
  • 熟悉html5的程序員們肯定都知道 元素,該元素是用來在頁面中規(guī)定一塊區(qū)域潮改,然后由js在該區(qū)域內(nèi)繪制圖形狭郑。canv...
    米幾V閱讀 2,149評論 1 5