canvas畫布

<canvas>是html5新增的畫布元素,為了客戶端矢量圖形而設計的蝎亚,它自己沒有行為(僅僅是一個畫圖的容器)赶撰,但是定義了一個 API 支持腳本化客戶端繪圖操作。canvas默認的寬為300px炕舵,高為150px,你可以直接在該對象上指定寬度和高度跟畅,但是咽筋,其大多數(shù)功能都可以通過 CanvasRenderingContext2D 對象獲得。 這是通過 Canvas 對象的 getContext() 方法并且把直接量字符串 "2d" 作為唯一的參數(shù)傳遞給它而獲得的徊件。

html代碼
//添加canvas標簽
<canvas width=500 height=500></canvas>
js代碼
// 獲得canavs元素
var canvas =document.getElementById('myCanvas');
// 獲得canvas上下文對象
var ctx = canvas.getContext('2d');

Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari 支持 <canvas> 標簽奸攻。 注釋:Internet Explorer 8 以及更早的版本不支持 <canvas> 標簽。

一虱痕、路徑繪制

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        #canvas {
            border: 1px solid #000000;
        }
    </style>
</head>
<body>
<canvas id="canvas" height="300" width="300"></canvas>
<script>
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.moveTo(100, 100);//移動到( 100睹耐,100)坐標點,作為起點
    ctx.lineTo(200, 100); //從當前點繪制直線到(200,100)(上一個點即為當前點)
    ctx.lineTo(200, 200);
    ctx.stroke();//繪制路徑
</script>
</body>
</html>
效果圖

在上述js代碼中加入 ctx.closePath();創(chuàng)建一條從當前點回到起始點的路徑部翘。

//js代碼
var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
        ctx.moveTo(100, 100);
        ctx.lineTo(200, 100);
        ctx.lineTo(200, 200);
        ctx.closePath();
        ctx.stroke();
效果圖

另外硝训,可以填加 lineWidth 設置線段寬度,fill(),進行填充新思,默認填充色為黑色窖梁。當存在fill()時,代碼種無 ctx.closePath()也可以進行填充夹囚。

   //js代碼
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.fillStyle = 'red';
    ctx.moveTo(100, 100);
    ctx.lineTo(200, 100);
    ctx.lineTo(200, 200);
    ctx.closePath();
    ctx.fill();
效果圖

說明

1.fill和stroke方法都是作用在當前的所有子路徑纵刘。
2.完成一條路徑后要重新開始另一條路徑時必須使用beginPath()方法, beginPath開始子路徑的一個新的集合。
例如:

    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.strokeStyle= 'red';
    ctx.moveTo(100, 100);
    ctx.lineTo(200, 100);
    ctx.closePath();
    ctx.stroke();
    ctx.strokeStyle='green';
    ctx.moveTo(100, 200);
    ctx.lineTo(200, 200);
    ctx.stroke();
未添加closePath
添加closePath

二荸哟、文本

繪制實心文本假哎、空心文本蛔翅。

var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.font = "30px Arial";
    ctx.fillText("Hello World", 10, 50);
    ctx.strokeText("Hello World", 10, 100);
文本

三、矩形

1位谋、ctx.rect(x, y, dx, dy);
    x,y在矩形左上點的坐標山析,dx,dy為矩形的寬高掏父。
    需配合ctx.fill() ctx.stroke()使用
2笋轨、ctx.fillRect(x, y, dx, dy);
   效果同
   ctx.rect(x, y, dx, dy);
   ctx.fill();
3、ctx.strokeRect(x, y, dx, dy);
   效果同
   ctx.rect(x, y, dx, dy);
   ctx.stroke();
4赊淑、ctx.clearRect(x, y, dx, dy);
   擦除某一區(qū)域爵政,x,y為需擦除區(qū)域的左上點的坐標,dx陶缺,dy寬高钾挟。
var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.fillRect(50, 50, 50, 100);
    ctx.strokeRect(200,50,50,100);
    ctx.clearRect(50,50,30,30);
效果圖

四、弧形

arc(x, y, r, 起始弧度, 結束弧度,弧形的?方向(0或1) )
0順時針 饱岸,1逆時針
默認為0

各位置的度數(shù)
   var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.arc(100,100,50,0,Math.PI/180*90);
    ctx.stroke();
順時針 90度圓弧
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.arc(100,100,50,0,Math.PI/180*270);
    ctx.stroke();
順時針 270度圓弧
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    ctx.arc(100,100,50,0,Math.PI/180*90,1);
    ctx.stroke();
逆時針 0-90 圓弧

五掺出、圖片填充

createPattern(image,"repeat|repeat-x|repeat-y|no-repeat")

    //html代碼
    <canvas id="canvas" width="500" height="500"></canvas>
    <img src="" style="visibility: hidden">
    //js代碼
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    window.onload = function () {
        var Img = document.getElementsByTagName('img')[0];
        ctx.fillStyle = ctx.createPattern(Img, 'repeat');//設置為重復
        ctx.fillRect(0, 0, 500, 400);//填充范圍
    };
效果圖

六、漸變效果

漸變可以填充在矩形, 圓形, 線條, 文本等等, 各種形狀可以自己定義不同的顏色苫费。
以下有兩種不同的方式來設置Canvas漸變:

createLinearGradient(x,y,x1,y1) - 線條漸變
x汤锨、y為起點坐標,x1百框、y1為終點坐標
createRadialGradient(x,y,r,x1,y1,r1) -徑向漸變
x,y x1,y1為圓點闲礼,r、r1位半徑
addColorStop()方法指定顏色停止铐维,參數(shù)使用坐標來描述柬泽,可以是0至1.
使用漸變,設置fillStyle或strokeStyle的值為 漸變嫁蛇,然后繪制形狀锨并,如矩形,文本棠众,或一條線琳疏。

使用createLinearGradient

    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    var bg = ctx.createLinearGradient(0, 0, 0, 500);
    bg.addColorStop(0, '#000');
    bg.addColorStop(0.5, 'red');
    bg.addColorStop(1, '#fff');
    ctx.fillStyle = bg;
    ctx.fillRect(0, 0, 300, 300);
效果圖
  var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    var gradient_font = ctx.createLinearGradient(0, 0, canvas.width, 0);
    gradient_font.addColorStop(0,'blue');
    gradient_font.addColorStop(0.3,'red');
    gradient_font.addColorStop(0.6,'yellow');
    gradient_font.addColorStop(1,'green');
    ctx.font = '40px Arial';
    ctx.fillStyle = gradient_font;
    ctx.fillText('hello world', 50, 150);
文字漸變效果

使用createRadialGradient

    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    var bg = ctx.createRadialGradient(150, 150, 50, 150, 150, 110);
    bg.addColorStop(0, '#fff');
    bg.addColorStop(0.5, 'pink');
    bg.addColorStop(1, '#fff');
    ctx.fillStyle = bg;
    ctx.fillRect(0, 0, 300, 300);
效果圖
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末有决,一起剝皮案震驚了整個濱河市闸拿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌书幕,老刑警劉巖新荤,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異台汇,居然都是意外死亡苛骨,警方通過查閱死者的電腦和手機篱瞎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痒芝,“玉大人俐筋,你說我怎么就攤上這事⊙铣模” “怎么了澄者?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長请琳。 經常有香客問我粱挡,道長,這世上最難降的妖魔是什么俄精? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任询筏,我火速辦了婚禮,結果婚禮上竖慧,老公的妹妹穿的比我還像新娘嫌套。我一直安慰自己,他們只是感情好圾旨,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布灌危。 她就那樣靜靜地躺著,像睡著了一般碳胳。 火紅的嫁衣襯著肌膚如雪勇蝙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天挨约,我揣著相機與錄音味混,去河邊找鬼。 笑死诫惭,一個胖子當著我的面吹牛翁锡,可吹牛的內容都是我干的。 我是一名探鬼主播夕土,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼馆衔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怨绣?” 一聲冷哼從身側響起角溃,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篮撑,沒想到半個月后减细,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡赢笨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年未蝌,在試婚紗的時候發(fā)現(xiàn)自己被綠了驮吱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡萧吠,死狀恐怖左冬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情纸型,我是刑警寧澤又碌,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站绊袋,受9級特大地震影響毕匀,放射性物質發(fā)生泄漏。R本人自食惡果不足惜癌别,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一皂岔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧展姐,春花似錦躁垛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至擂达,卻和暖如春土铺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背板鬓。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工悲敷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俭令。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓后德,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抄腔。 傳聞我的和親對象是個殘疾皇子瓢湃,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容

  • 一绵患、什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在網(wǎng)頁上繪制圖像 畫布是...
    EndEvent閱讀 684評論 0 1
  • 一棍掐、簡介 HTML5 中的定義:“它是依賴分辨率的位圖畫布藏雏,你可以在 canvas 上面繪制任何圖形,甚至加載照片...
    destiny0904閱讀 10,522評論 1 4
  • 1作煌、canvas 是H5 新加入的標簽 用來在頁面中繪制圖形 一般稱之為畫布掘殴。2、canvas的寬高要以屬性的形...
    Simon_s閱讀 498評論 0 0
  • canvas用途 游戲 小游戲 圖表 報表 如 Charts插件 炫酷效果 banner 模擬器粟誓、圖形編輯器 等...
    飛魚_JS閱讀 944評論 0 2
  • 一:canvas簡介 1.1什么是canvas奏寨? ①:canvas是HTML5提供的一種新標簽 ②:HTML5 ...
    GreenHand1閱讀 4,674評論 2 32