画直线:

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. SharePoint 2013 另一个程序正在使用此文件,进程无法访问。 (异常来自 HRESULT:0x80070020)

    环境:SharePoint 2013 + Windows Server 2012 R2 在管理中心新建一个Web Application,端口为:88.顺利创建网站集后,打开访问却提示:无法显示此页 ...

  2. springboot中url地址重写(urlwrite)

    在日常网站访问中,会把动态地址改造成伪静态地址. 例如: 访问新闻栏目 /col/1/,这是原有地址,如果这样访问,不利于搜索引擎检索收录,同时安全性也不是很好. 改造之后: /col/1.html. ...

  3. 压缩跟踪Compressive Tracking(转)

    这位博主总结的实在太好了,从原理到论文到代码,连论文都不用看:论文:http://blog.csdn.net/zouxy09/article/details/8118360 代码部分:http://b ...

  4. ***解决UEditor编辑器无法插入第三方视频地址

    转:http://blog.csdn.net/qq_16241043/article/details/53894847 xssFilter导致插入视频异常,编辑器在切换源码的过程中过滤掉img的_ur ...

  5. nginx log 错误502 upstream sent too big header while reading response header from upstream

    cookies的值超出了范围我是说 看看了一下日志 错误502 upstream sent too big header while reading response header from upst ...

  6. Java第三阶段学习(六、多线程)

    一.进程和线程的区别: 进程:指正在运行的程序,当一个程序进入内存运行,就变成一个进程. 线程:线程是进程的一个执行单元. 总结:一个程序运行后至少会有一个进程,一个进程可以有多个线程. 多线程:多线 ...

  7. 搭建微信小程序基本的https与wss环境

    年底了写一篇小程序环境搭建的文章, 主要是怎么搭建一个线上环境以及怎么不改动原有http Api的情况 1.准备工作 域名一个 免费证书(推荐: 腾讯云.阿里云.便宜ssl 都是免费的 配置好后先将证 ...

  8. 怎么去除移动端点击a标签链接时的背景色

    在手机端点击链接时会发现有一个背景色,有时候需要改变这个颜色,或者去除这个颜色,有时候a标签做成按钮时这个颜色的存在会很丑,像这样: 可以通过 -webkit-tap-highlight-color: ...

  9. Mysql - 参数修改

    概述 mysql的参数可以分为两类:a. 动态参数,数据库启动期间能被修改,而修改又分为两种(global级,session级).b. 静态参数,即数据库启动期间不能修改. 接下来利用参数wait_t ...

  10. ssh端口转发(之kettle ssh方式连接数据库)

    ssh参数解释 格式 ssh  [user@]host [command] 选项: -1:强制使用ssh协议版本1: -2:强制使用ssh协议版本2: -4:强制使用IPv4地址: -6:强制使用IP ...