画直线:

1
2
3
4
5
6
7
8
9
10
11
var c = document.getElementById("myCanvas"); //不要忘写document
var ctx = c.getContext("2d");
 
ctx.lineWidth = 10;
ctx.strokeStyle = "red"; // 注意不是strokeColor;
 
//创建一个路径
ctx.beginPath();
ctx.moveTo(10,10);
ctx.lineTo(50,50);
ctx.stroke();

添加线帽:ctx.lineCap = “butt”(默认) ;”round”(半圆形); ”square”(正方形);  

1
2
3
4
5
6
7
8
9
10
11
12
13
//额外补充,加深 begbinPath 与stroke 的区域理解
ctx.beginPath();
ctx.moveTo(100,100);
ctx.lineTo(200,100);
ctx.strokeStyle = "red";
ctx.stroke(); //(1)
ctx.beginPath(); //(2)
ctx.moveTo(100,200);
ctx.lineTo(200,200);
ctx.strokeStyle = "blue";
ctx.stroke(); (3)
//代码绘制一蓝一红两条线;省略 (1)或(3) 都只能绘制其中一条;省略 (2)会得到
一紫一蓝;省略 (1)和(2) 会得到两条蓝色

画矩形:

1
2
3
4
5
6
7
8
9
10
ctx.lineWidth = 10;
ctx.strokeStyle = "yellow"; //实心矩形:ctx.fillStyle = “yellow”;
ctx.beginPath();
//用 strokeRect 函数来绘制一个空心矩形;四个参数分别为起点坐标(左上角)
X、 Y,矩形长宽。
ctx.strokeRect(10,10,100,100); //实心矩形:ctx.fillRect(10.10.100.100);
/*strokeRect 函数替代方法。 //实心矩形:
* ctx.rect(10,10,100,100); //ctx.rect(10,10,100,100);
* ctx.stroke(); //ctx.fill();
*/

画圆弧:

1
2
3
4
5
6
ctx.beginPath();
//用 arc 函数绘制圆弧,六个参数分别为圆心坐标 X、Y ,半径,起始角度(a),
终止角度( b),是否逆时针(圆弧方向 c)
ctx.arc(100,100,70,0,1/2*Math.PI,true);
//可通过 fill 函数绘制实心圆弧
ctx.stroke();

//起始角度与终止角度都是根据圆心向右水平线确定的,它们分别确定圆弧开始点与结束点;再确定圆弧方向绘制。

fill 画圆弧的变化情况:

 

画圆角矩形:

1
2
3
4
5
6
7
ctx.beginPath();
ctx.moveTo(20,20);
ctx.lineTo(70,20);
//用 arcTo 函数来绘制圆弧,五个参数分别是 p1 坐标,p2 坐标,圆弧半径。
ctx.arcTo(120,30,120,70,50);
ctx.lineTo(120,120);
ctx.stroke();

P1 点X 坐标与P2 点 X 坐标相同;P1 点Y 坐标相比 P2 点 Y 坐标更接近起始点 Y 坐标

檫除 canvas 画板:

1
2
3
4
//用 clearRect 函数擦除一个矩形区域,四个参数分别是起点 X、Y 坐标,矩形长宽。
ctx.clearRect(30,30,50,50);
//无需在 ctx.beginPath()中;无需使用 ctx.stroke()
//擦除画板,对设置之前绘制的图形有效,对之后的无效。

画曲线:

  • 二次贝尔塞尔曲线:

    1
    2
    3
    4
    5
    6
    ctx.beginPath();
    ctx.moveTo(100,100);
    //用 quadraticCurveTo 函数,四个参数分别是控制点( a)X 、Y 坐标,终点( b)
    X、 Y 坐标。
    ctx.quadraticCurveTo(20,50,200,20)
    ctx.stroke();
  • 三次贝尔塞尔曲线:
    1
    2
    3
    4
    5
    6
    ctx.beginPath();
    ctx.moveTo(68,130);
    //用 berzierCurveTo 函数,六个参数分别是控制点( a)X 、Y 坐标,控制点( b)
    X、 Y 坐标,终点( c)X 、Y 坐标。
    ctx.bezierCurveTo(20,10,268,10,268,170);
    ctx.stroke();

利用 clip 在指定区域绘图:

1
2
3
4
5
6
7
8
//绘制个圆
ctx.arc(100,100,40,0,2*Math.PI,true); //目前已知只能用 arc、rect 设置区域
//用 clip 函数将这个圆作为绘制操作的区域,之后画出的图形只能显示在这个区
域内。也可使用 ctx.rect()绘制矩形区域。
ctx.clip(); //对在这之前绘制的图像无效
ctx.beginPath();
ctx.fillStyle = "lightblue";
ctx.fillRect(0,0,300,300);//绘制出来的矩形只能看到其在圆内的部分

  

绘制自定义图形:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
根据上面的图形进行组合,如:直线加三次贝塞尔曲线
//绘制直线部分
ctx.beginPath();
ctx.lineWidth = 5;
 
ctx.strokeStyle = "red";
ctx.moveTo(100,150);
ctx.lineTo(150,50);
ctx.lineTo(200,150);
ctx.lineTo(150,250);
ctx.lineTo(100,150)
ctx.stroke();
//绘制三次贝尔塞尔曲线部分
ctx.beginPath();
ctx.moveTo(100,150);
ctx.bezierCurveTo(50,100,100,0,150,50);
ctx.bezierCurveTo(200,0,250,100,200,150);
ctx.bezierCurveTo(250,200,200,300,150,250);
ctx.bezierCurveTo(100,300,50,200,100,150);
ctx.stroke();

  

//可以根据对称性,设置特定的长度确定三次贝塞尔曲线的控制点,如上面例子中设置50.

//使用 beginPath()表示开始一段新的绘制,相当于局部函数区域,里面有的变量设置会覆盖外面的设置。

//综合绘制填充图片时,注意覆盖顺序。

绘制文本:

  • 绘制文字:

    1
    2
    3
    4
    5
    6
    //设置文字大小与字体
    ctx.font = "30px Arial";
    //使用函数 fillText 绘制文本,四个参数分别为文本字符串,默认点 a 的X 坐标,
    Y 坐标,文本最大宽度(可省略,在最大范围内为本身的宽度,超过范围则压缩。)
    ctx.fillText("Hello World",100,50); //可以用 fillStyle 设置字体颜色为单色或是设置好
    的颜色渐变 ;注意fillText 不能像fillRect 那样拆分成 fill 与rect 执行。

     

    1
    2
    //使用函数 strokefill 绘制文本
    ctx.strokeText("Hello World",100,50);

      

  • 粗体效果:
    1
    2
    3
    4
    //使用 font-weight 值:normal(正常), bold(粗体),bolder(更粗 ),lighter( 更细)。
    ctx.font = “normal 30px Arial”;
    //或者使用数字
    ctx.font = “100 30px Arial”; / /目前已知只有 100、600 、900
  • 斜体效果:

    1
    ctx.font = “italic 30px Arial”;

canvas使用1的更多相关文章

  1. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

  2. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  3. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  4. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  5. Canvas坐标系转换

    默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...

  6. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  7. 用html5的canvas和JavaScript创建一个绘图程序

    本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...

  8. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  9. 使用 JavaScript 和 canvas 做精确的像素碰撞检测

    原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...

  10. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

随机推荐

  1. 微信小程序调用接口返回数据或提交数据

    由于小程序发起网络请求需要通过 wx.request 文档地址 https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html 习 ...

  2. linux如何查看端口被哪个进程占用?

    参考:https://jingyan.baidu.com/article/546ae1853947b71149f28cb7.html 1.lsof -i:端口号 2.netstat -tunlp|gr ...

  3. MAVEN:不能互相引用

    工程A,工程B,工程C,这三个工程:C依赖B,B依赖A,这是没有问题的. 但是不能A依赖B,B又依赖A,这是不允许的.

  4. 开启@EnableRedisHttpSession

    sessionId=569662ce-c6d5-42a9-a94b-c9df826df716 1800秒后失效 sessionId=23913542-9b5f-4699-8a87-1023b57f5f ...

  5. Java基础84 javaBean规范

    1.javaBean的概述 1.javaBeam(咖啡豆)是一种开发规范,也可以说是一种技术.  2.JavaBean就是一个普通java类,只要符合以下规定才能称作为javaBean:        ...

  6. 使用VS2013、TFS2013和Git进行分布式团队协作

    题记:呵呵,首先声明,题目起的有点大,其实我只想介绍下VS2013和TFS2013新加入的Git功能,也不是在VS中使用Git的详细向导(以后有空再详细分享给大家).这篇文章虽然在写这篇文章<V ...

  7. 【LOJ】#2114. 「HNOI2015」菜肴制作

    题解 把所有边反向 从小到大枚举每个点,把每个点能到达的点挑出来,判完无解后显然是一个DAG,然后在上面求一个编号最大的拓扑序,把这些点全部标记为已选,把每次求得的拓扑序倒序输出 代码 #includ ...

  8. 跟厂长学PHP7内核(六):变量之zval

    记得网上流传甚广的段子"PHP是世界上最好的语言",暂且不去讨论是否言过其实,但至少PHP确实有独特优势的,比如它的弱类型,即只需要$符号即可声明变量,使得PHP入手门槛极低,成为 ...

  9. swagger restful api form映射实体对象和body映射实体对象配置

    实体Model @ModelAttribute一个具有如下三个作用: ①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数 ...

  10. NOSQL快速入门

    NoSql是一个很老的概念了,但对自己来说,仍然是一个短板,果断补上. 首先通过几个简单的例子来了解NOSQL在国内的情况(2013年左右的数据,有些过时),比如新浪微博,其就有200多台物理机运行着 ...