Canvas小结(canvas路径)

什么是Canvas

HTML5的canvas元素使用JavaScript在网页上绘制图像。
画布(canvas)是一个矩形区域,可以控制其每一像素
canvas拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

如何创建Canvas元素

向HTML5页面添加canvas元素,规定元素的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");

然后,创建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"//红色路径
    ctx2.moveTo(10,75);
    ctx2.lineTo(255,70);
    ctx2.stroke();//进行绘制
    ctx2.beginPath();
    ctx2.strokeStyle="blue"//蓝色路径
    ctx2.moveTo(50,10);
    ctx2.lineTo(150,130);
    ctx2.stroke();//进行绘制
    ctx2.beginPath();
    ctx2.strokeStyle="green"//绿色路径
    ctx2.moveTo(200,10);
    ctx2.lineTo(20,130);
    ctx2.stroke();//进行绘制

colsePath()方法创建从当前点到开始点的路径(连接当前点到开始点)

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() 方法从原始画布中剪切任意形状和尺寸。

一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)

clip()
    var c4=document.getElementById("mycanvas4");
    var ctx4=c4.getContext("2d");
    // 剪切矩形区域
    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() 方法创建弧/曲线(用于创建圆或部分圆)。

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    可选。规定应该逆时针还是顺时针绘图。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() 方法在画布上创建介于两个切线之间的弧/曲线。

arcTo()
    var c8 = document.getElementById("mycanvas8");
    var ctx8 = c8.getContext("2d");
    ctx8.beginPath();。
    ctx8.moveTo(20,20);           // 创建开始点
    ctx8.lineTo(100,20);          // 创建水平线
    ctx8.arcTo(150,20,150,70,50); // 创建弧
    ctx8.lineTo(150,120);         // 创建垂直线
    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();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容