canvas使用1
画直线:
|
1
2
3
4
5
6
7
8
9
10
11
|
var c = document.getElementById("myCanvas"); //不要忘写documentvar 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()//擦除画板,对设置之前绘制的图形有效,对之后的无效。 |
画曲线:
- 二次贝尔塞尔曲线:
123456
ctx.beginPath();ctx.moveTo(100,100);//用 quadraticCurveTo 函数,四个参数分别是控制点( a)X 、Y 坐标,终点( b)X、 Y 坐标。ctx.quadraticCurveTo(20,50,200,20)ctx.stroke(); - 三次贝尔塞尔曲线:
123456
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()表示开始一段新的绘制,相当于局部函数区域,里面有的变量设置会覆盖外面的设置。
//综合绘制填充图片时,注意覆盖顺序。
绘制文本:
- 绘制文字:
123456
//设置文字大小与字体ctx.font ="30px Arial";//使用函数 fillText 绘制文本,四个参数分别为文本字符串,默认点 a 的X 坐标,Y 坐标,文本最大宽度(可省略,在最大范围内为本身的宽度,超过范围则压缩。)ctx.fillText("Hello World",100,50);//可以用 fillStyle 设置字体颜色为单色或是设置好的颜色渐变 ;注意fillText 不能像fillRect 那样拆分成 fill 与rect 执行。12//使用函数 strokefill 绘制文本ctx.strokeText("Hello World",100,50); - 粗体效果:
1234
//使用 font-weight 值:normal(正常), bold(粗体),bolder(更粗 ),lighter( 更细)。ctx.font = “normal 30px Arial”;//或者使用数字ctx.font = “100 30px Arial”; / /目前已知只有 100、600 、900 斜体效果:
1ctx.font = “italic 30px Arial”;
canvas使用1的更多相关文章
- html5 canvas常用api总结(三)--图像变换API
canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...
- 【探索】利用 canvas 实现数据压缩
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
- 获取Canvas当前坐标系矩阵
前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...
- Canvas坐标系转换
默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...
- Canvas绘图之平移translate、旋转rotate、缩放scale
画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
- 用html5的canvas和JavaScript创建一个绘图程序
本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...
- html5标签canvas函数drawImage使用方法
html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...
- 使用 JavaScript 和 canvas 做精确的像素碰撞检测
原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...
- H5项目开发分享——用Canvas合成文字
以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...
随机推荐
- SharePoint 2013 另一个程序正在使用此文件,进程无法访问。 (异常来自 HRESULT:0x80070020)
环境:SharePoint 2013 + Windows Server 2012 R2 在管理中心新建一个Web Application,端口为:88.顺利创建网站集后,打开访问却提示:无法显示此页 ...
- springboot中url地址重写(urlwrite)
在日常网站访问中,会把动态地址改造成伪静态地址. 例如: 访问新闻栏目 /col/1/,这是原有地址,如果这样访问,不利于搜索引擎检索收录,同时安全性也不是很好. 改造之后: /col/1.html. ...
- 压缩跟踪Compressive Tracking(转)
这位博主总结的实在太好了,从原理到论文到代码,连论文都不用看:论文:http://blog.csdn.net/zouxy09/article/details/8118360 代码部分:http://b ...
- ***解决UEditor编辑器无法插入第三方视频地址
转:http://blog.csdn.net/qq_16241043/article/details/53894847 xssFilter导致插入视频异常,编辑器在切换源码的过程中过滤掉img的_ur ...
- 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 ...
- Java第三阶段学习(六、多线程)
一.进程和线程的区别: 进程:指正在运行的程序,当一个程序进入内存运行,就变成一个进程. 线程:线程是进程的一个执行单元. 总结:一个程序运行后至少会有一个进程,一个进程可以有多个线程. 多线程:多线 ...
- 搭建微信小程序基本的https与wss环境
年底了写一篇小程序环境搭建的文章, 主要是怎么搭建一个线上环境以及怎么不改动原有http Api的情况 1.准备工作 域名一个 免费证书(推荐: 腾讯云.阿里云.便宜ssl 都是免费的 配置好后先将证 ...
- 怎么去除移动端点击a标签链接时的背景色
在手机端点击链接时会发现有一个背景色,有时候需要改变这个颜色,或者去除这个颜色,有时候a标签做成按钮时这个颜色的存在会很丑,像这样: 可以通过 -webkit-tap-highlight-color: ...
- Mysql - 参数修改
概述 mysql的参数可以分为两类:a. 动态参数,数据库启动期间能被修改,而修改又分为两种(global级,session级).b. 静态参数,即数据库启动期间不能修改. 接下来利用参数wait_t ...
- ssh端口转发(之kettle ssh方式连接数据库)
ssh参数解释 格式 ssh [user@]host [command] 选项: -1:强制使用ssh协议版本1: -2:强制使用ssh协议版本2: -4:强制使用IPv4地址: -6:强制使用IP ...