Canvas小結(canvas路徑)

什么是Canvas

HTML5的canvas元素使用JavaScript在網頁上繪制圖像。
畫布(canvas)是一個矩形區(qū)域壮吩,可以控制其每一像素
canvas擁有多種繪制路徑檐蚜、矩形蟆技、圓形玩敏、字符以及添加圖像的方法。

如何創(chuàng)建Canvas元素

向HTML5頁面添加canvas元素付魔,規(guī)定元素的id聊品、寬度和高度:

<canvas id="myCanvas" width="200" height="100"></canvas>

如何進行繪制工作

canvas元素本身沒有繪圖能力,所有的繪制工作必須在JavaScript內部完成

var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
cxt.fillStyle="#FF0000";
cxt.fillRect(0,0,150,75);

JavaScript使用id來尋找canvas元素

var c=document.getElementById("myCanvas");

然后几苍,創(chuàng)建context對象:

var cxt=c.getContext("2d");

stroke()方法會實際地繪制出通過moveTo()和lineTo方法定義的路徑,默認是黑色

stroke()
    var canvas = document.getElementById("mycanvas");
    var ctx = canvas.getContext("2d");
    ctx.moveTo(10,10);
    ctx.lineTo(20,20);
    ctx.lineTo(20,40);
    ctx.lineTo(40,40);
    ctx.lineTo(40,60);
    ctx.lineTo(60,80);
    ctx.lineTo(80,100);
    ctx.lineTo(100,100);
    ctx.lineTo(100,10);
    ctx.lineTo(10,10);
    // 通過strokeStyle屬性填充另一種顏色/漸變
    ctx.strokeStyle="green"
    ctx.stroke();

beginPath()方法開始一條路徑,或重置當前的路徑

beginPath()
    var c2 = document.getElementById("mycanvas2");
    var ctx2 = c2.getContext("2d");
    ctx2.beginPath();
    ctx2.lineWidth="8";
    ctx2.strokeStyle="red"http://紅色路徑
    ctx2.moveTo(10,75);
    ctx2.lineTo(255,70);
    ctx2.stroke();//進行繪制
    ctx2.beginPath();
    ctx2.strokeStyle="blue"http://藍色路徑
    ctx2.moveTo(50,10);
    ctx2.lineTo(150,130);
    ctx2.stroke();//進行繪制
    ctx2.beginPath();
    ctx2.strokeStyle="green"http://綠色路徑
    ctx2.moveTo(200,10);
    ctx2.lineTo(20,130);
    ctx2.stroke();//進行繪制

colsePath()方法創(chuàng)建從當前點到開始點的路徑(連接當前點到開始點)

closePath()
    var c3 = document.getElementById("mycanvas3");
    var ctx3 = c3.getContext("2d");
    ctx3.beginPath();
    ctx3.moveTo(20,20);
    ctx3.lineTo(20,120);
    ctx3.lineTo(70,120);
    ctx3.closePath();
    ctx3.stroke();

clip() 方法從原始畫布中剪切任意形狀和尺寸陈哑。

一旦剪切了某個區(qū)域妻坝,則所有之后的繪圖都會被限制在被剪切的區(qū)域內(不能訪問畫布上的其他區(qū)域)

clip()
    var c4=document.getElementById("mycanvas4");
    var ctx4=c4.getContext("2d");
    // 剪切矩形區(qū)域
    ctx4.rect(50,20,200,120);
    ctx4.stroke();
    ctx4.clip();
    // 在 clip() 之后繪制綠色矩形
    ctx4.fillStyle="green";
    ctx4.fillRect(0,0,160,110);

quadraticCurveTo() 方法通過使用表示二次貝塞爾曲線的指定控制點伸眶,向當前路徑添加一個點。

quadraticCurveTo()
    var c5 = document.getElementById("mycanvas5");
    var ctx5 = c5.getContext("2d");
    ctx5.beginPath();
    ctx5.moveTo(20,20);
    //context.quadraticCurveTo(cpx,cpy,x,y);
    ctx5.quadraticCurveTo(180,100,200,20);
    ctx5.lineWidth="5"
    ctx5.strokeStyle="purple"
    ctx5.stroke();
    ctx5.beginPath();
    ctx5.moveTo(20,40);
    ctx5.quadraticCurveTo(20,180,200,120);
    ctx5.strokeStyle="#000"
    ctx5.stroke();

bezierCurveTo() 方法通過使用表示三次貝塞爾曲線的指定控制點刽宪,向當前路徑添加一個點厘贼。擁有兩個控制點

bezierCurveTo()
    var c6 = document.getElementById("mycanvas6");
    var ctx6 = c6.getContext("2d");
    ctx6.beginPath();
    //bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);
    ctx6.moveTo(20,20);
    ctx6.bezierCurveTo(20,100,200,100,200,20);
    ctx6.stroke();
    ctx6.beginPath();
    ctx6.moveTo(20,40);
    ctx6.bezierCurveTo(20,160,280,160,280,40);
    ctx6.strokeStyle="red"
    ctx6.stroke();

arc() 方法創(chuàng)建弧/曲線(用于創(chuàng)建圓或部分圓)。

arc()
    var c7 = document.getElementById("mycanvas7");
    var ctx7 = c7.getContext("2d");
    ctx7.beginPath();
    //context.arc(x,y,r,sAngle,eAngle,counterclockwise);
    /*
    x         圓的中心的 x 坐標圣拄。
    y         圓的中心的 y 坐標嘴秸。
    r         圓的半徑。
    sAngle    起始角庇谆,以弧度計岳掐。(弧的圓形的三點鐘位置是 0 度)。
    eAngle    結束角饭耳,以弧度計串述。
    counterclockwise    可選。規(guī)定應該逆時針還是順時針繪圖寞肖。False = 順時針纲酗,true = 逆時針。
    */
    ctx7.arc(100,75,50,0,2*Math.PI);
    ctx7.stroke();
    ctx7.beginPath();
    ctx7.arc(200,80,70,0,1.5*Math.PI);
    ctx7.strokeStyle="red"
    ctx7.stroke();
    ctx7.beginPath();
    ctx7.arc(150,50,50,0,1*Math.PI,false);
    ctx7.strokeStyle="green"
    ctx7.stroke();
    ctx7.beginPath();
    ctx7.arc(100,50,50,0,1*Math.PI,true);
    ctx7.strokeStyle="blue"
    ctx7.stroke();

arcTo() 方法在畫布上創(chuàng)建介于兩個切線之間的弧/曲線新蟆。

arcTo()
    var c8 = document.getElementById("mycanvas8");
    var ctx8 = c8.getContext("2d");
    ctx8.beginPath();觅赊。
    ctx8.moveTo(20,20);           // 創(chuàng)建開始點
    ctx8.lineTo(100,20);          // 創(chuàng)建水平線
    ctx8.arcTo(150,20,150,70,50); // 創(chuàng)建弧
    ctx8.lineTo(150,120);         // 創(chuàng)建垂直線
    ctx8.stroke();                // 進行繪制

context.isPointInPath(測試的x坐標,測試的y坐標);

isPointInPath()
    var c9 = document.getElementById("mycanvas9");
    var ctx9 = c9.getContext("2d");
    ctx9.beginPath();
    ctx9.rect(20,20,150,150);
    //如下,測試坐標 (10,10) ,不在當前路徑中琼稻,所以返回false茉兰。所以渲染為綠色
    if (ctx9.isPointInPath(10,10)) {
        ctx9.fillStyle = "red"
    }else{
        ctx9.fillStyle = "green"
    }
    ctx9.fill();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市欣簇,隨后出現(xiàn)的幾起案子规脸,更是在濱河造成了極大的恐慌,老刑警劉巖熊咽,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莫鸭,死亡現(xiàn)場離奇詭異,居然都是意外死亡横殴,警方通過查閱死者的電腦和手機被因,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衫仑,“玉大人梨与,你說我怎么就攤上這事∥挠” “怎么了粥鞋?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瞄崇。 經常有香客問我呻粹,道長壕曼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任等浊,我火速辦了婚禮腮郊,結果婚禮上,老公的妹妹穿的比我還像新娘筹燕。我一直安慰自己轧飞,他們只是感情好,可當我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布撒踪。 她就那樣靜靜地躺著过咬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糠涛。 梳的紋絲不亂的頭發(fā)上援奢,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天,我揣著相機與錄音忍捡,去河邊找鬼集漾。 笑死,一個胖子當著我的面吹牛砸脊,可吹牛的內容都是我干的具篇。 我是一名探鬼主播,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼凌埂,長吁一口氣:“原來是場噩夢啊……” “哼驱显!你這毒婦竟也來了?” 一聲冷哼從身側響起瞳抓,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤埃疫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孩哑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栓霜,經...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年横蜒,在試婚紗的時候發(fā)現(xiàn)自己被綠了胳蛮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡丛晌,死狀恐怖仅炊,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情澎蛛,我是刑警寧澤抚垄,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響督勺,放射性物質發(fā)生泄漏渠羞。R本人自食惡果不足惜斤贰,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一智哀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荧恍,春花似錦瓷叫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骗爆,卻和暖如春次氨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摘投。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工煮寡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人犀呼。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓幸撕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親外臂。 傳聞我的和親對象是個殘疾皇子坐儿,可洞房花燭夜當晚...
    茶點故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內容