详解html5 canvas常用api总结(二)--绘图API


Posted in HTML / CSS onDecember 14, 2016

canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API。

绘画的时候canvas相当于画布,而context相当于画笔。

1.绘制线条

moveTo(x0,y0):把当前画笔(ictx)移动到(x0,y0)这个位置。

lineTo(x1,y1):从当前位置(x0,y0)处到(x1,y1)画一条直线。

beginPath():开启一条路径或者重置当前路径。

closePath():从当前点回到路径起始点,也就是上一个beginPath的位置,回避和路径。

stroke():绘制。必须加了这个函数才会画图,所以这个一定要放在最后。

var icanvas=document.getElementById("iCanvas");

var ictx=icanvas.getContext("2d");

ictx.beginPath();

ictx.moveTo(0,0);

ictx.lineTo(300,150);

ictx.lineTo(3,150);

ictx.closePath();

ictx.stroke();

效果:

详解html5 canvas常用api总结(二)--绘图API

这里要注意,如果closepath放在stroke函数后面,则不会绘制成一个闭合的线条,因为在闭合前,已经绘制了,所以左边那条直线不会画出来。

2.线条样式

lineCap:线条端点样式,butt,round,square。                        

详解html5 canvas常用api总结(二)--绘图API

lineJoin:两线条相交时的拐点样式,其中设置为miter时还可以通过miterLimet设置拐点交界处的最大长度。

 

详解html5 canvas常用api总结(二)--绘图API

miterLimet:如果斜接长度超过 miterLimit 的值,边角会以 lineJoin 的 "bevel" 类型来显示。

lineWidth:线条宽度

strokeStyle: 线条颜色、渐变(定义好的渐变对象)、模式。 context.strokeStyle="#333";

var iCanvas=document.getElementById("iCanvas");

var ictx=iCanvas.getContext("2d");

ictx.beginPath();

ictx.strokeStyle="#0000ff";

ictx.lineWidth=20;

ictx.lineCap="round";

ictx.moveTo(10,10);

ictx.lineTo(80,80);

ictx.stroke();

ictx.beginPath();//在这里必须beginPath,不然一直会以第一个为基础会话,在最后的stroke的时候,会再次画一条黑色的斜线,一共3条线。

ictx.strokeStyle="#000000";

ictx.lineCap="butt";

ictx.lineWidth=10;

ictx.moveTo(80,10);

ictx.lineTo(10,80);

ictx.stroke();

beginPath和closePath可以不成对出现,两者之间几乎没有关系,closePath是用来闭合终点和起始点画一条闭合路径的。

3.绘制曲线

arc(x,y,radius,startAngle,endAngle,anticlockwise):绘制曲线,radius是曲线半径,startAngle,endAngle开始角度和结束角度,用的是弧度(Math.PI/180)*角度值,anticlockwise绘制方向;

arcTo(x1,y1,x2,y2,radius):绘制两切线之前的曲线。

ictx.beginPath();

ictx.moveTo(20,20);           // 创建开始点

ictx.lineTo(100,20);          // 创建水平线

ictx.arcTo(150,20,150,70,50); // 创建弧

ictx.lineTo(150,120);         // 创建垂直线

ictx.stroke();

绘制曲线的起点和水平线结束点与设置的第一个点的连线相切,曲线的终点和第一个设置点与第二个设置点的连线相切。

详解html5 canvas常用api总结(二)--绘图API

quadraticCurveTo(x1,y1,x2,y2):二次贝塞尔曲线。(x1,y1)控制点的坐标,(x2,y2)结束点的坐标

bezierCurveTo(x1,y1,x2,y2,x,y):三次贝塞尔曲线。(x1,y1)控制点1的坐标,(x2,y2)控制点2的坐标 (x,y)结束点的坐标。

贝塞尔曲线在绘制一些非常流畅的曲线时非常有用。 

4.绘制矩形及填充

rect():创建矩形;

fillRect(x,y,width,height):绘制被填充的矩形:(x,y)起始点,width,height矩形宽高

strokeRect():绘制矩形线框

clearRect():清除掉矩形。

ictx.fillStyle="#0000ff";//设定填充颜色

ictx.fillRect(20,20,150,100);

ictx.strokeRect(180,20,100,100);

5.画笔属性

fillStyle:设置填充的颜色,渐变或模式(patten);

strokeStyle:画笔的颜色,渐变或者模式

6.绘制阴影

shadowColor:阴影yanse

shadowBlur:模糊级别

shadowOffsetX:阴影的水平距离

shadowOffsetY:阴影的垂直距离

ictx.shadowBlur=20;

ictx.shadowColor="#456";

ictx.shadowOffsetX=-10;

ictx.shadowOffsetY=30;//先设置阴影再画矩形

ictx.fillStyle="#108997";

ictx.fillRect(20,20,100,80);

ictx.stroke();

详解html5 canvas常用api总结(二)--绘图API

 7.绘制渐变

 createLinearGradient(x1,y1,x2,y2):绘制线性渐变,(x1,y1)是渐变的起始点,(x2,y2)是渐变的终点,位置不同可以制作出垂直或者水平渐变。

 createRadialGradient(x1,y1,r1,x2,y2,r2):径向渐变:,(x1,y1)是渐变的起始点圆心,r1是半径,(x2,y2)是渐变的终点,r2是结束点半径;

两种渐变都需要使用

addColorStop(stop,color)来设置渐变过程,stop是0.0到1.0的值。

var grd=ictx.createLinearGradient(0,0,170,0);

grd.addColorStop(0,"#000");

grd.addColorStop(0.5,"#378923");

grd.addColorStop(1,"#ddd");

ictx.fillStyle=grd;//这里渐变是一个对象,用来向fillstyle传值

ictx.fillRect(20,20,150,100);

 

var grd=ictx.createRadialGradient(300,225,15,250,225,100);

grd.addColorStop(0,"#345");

grd.addColorStop(1,"#fff");

ictx.fillStyle=grd;

ictx.fillRect(200,150,150,100);

详解html5 canvas常用api总结(二)--绘图API

8.填充背景

 createPattern(image,"repeat|repeat-x|repeat-y|no-repeat"):image是一个图片对象,后面的参数是用来设定图片的重复方式。

 9.其他相关API

fill():填充当前路径。

isPointInPath():ictx.isPointInPath(x,y);判断这个点是否位于当前路径

清除画布方法:获取画布的宽高,icanvas.height,icanvas.width;然后使用clearRect();

修改画布的宽高:icanvas.width='200';icanvas.width='300'的方法。

globalAlpha:设置透明度,只能是0~1的数字,如果透明度不一样,在画第二幅之前重新设置即可。

toDataURL:icanvas.toDataURL(type,encoderOptions),这个函数返回一个image的base64的URI,参数都是可选的,type可以设置图片类型如image/jpeg,image/webp,默认是image/png;encoderOptions是一个0~1的数字,用来设置image/jpeg,image/webp的图片质量,其他格式的type设置这个参数无效。

 10.剪裁

clip():从画布中剪裁任意形状和尺寸的画布,之后所有的绘图都会被限制在剪裁的区域内。这个方法通常和绘制矩形,圆形等路径一起使用,在这些方法后面,剪切这个图像,后来画的就必须在这个剪切后的画布上了。

ictx.arc(100,100,50,(Math.PI/180)*0,(Math.PI/180)*360,true);

ictx.stroke();

ictx.clip();

ictx.fillStyle="green";

ictx.fillRect(0,0,150,100);

详解html5 canvas常用api总结(二)--绘图API

如果还想操作外部的画布,在剪切前使用save()函数保存,剪切后使用restore()函数恢复到之前保存的状态,但是中间做的操作不会消失哈。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3教程(4):网页边框和网页文字阴影
Apr 02 HTML / CSS
实例讲解CSS3中Transform的perspective属性的用法
Apr 22 HTML / CSS
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
Nov 30 HTML / CSS
html+css3实现的登录界面
Dec 09 HTML / CSS
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
Mar 14 HTML / CSS
突破canvas语法限制 让他支持链式语法
Dec 24 HTML / CSS
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
Dec 25 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
Jan 09 HTML / CSS
canvas与html5实现视频截图功能示例
Dec 15 HTML / CSS
AmazeUI导航的示例代码
Aug 14 HTML / CSS
CSS变量实现主题切换的方法
Jun 23 HTML / CSS
html form表单基础入门案例讲解
Jul 21 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
Dec 14 #HTML / CSS
详解使用HTML5 Canvas创建动态粒子网格动画
Dec 14 #HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
Dec 09 #HTML / CSS
Html5 Geolocation获取地理位置信息实例
Dec 09 #HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
Dec 03 #HTML / CSS
HTML5标签大全
Nov 23 #HTML / CSS
HTML5拖放效果的实现代码
Nov 17 #HTML / CSS
You might like
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
php获取微信openid方法总结
2019/10/10 PHP
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
vue模板语法-插值详解
2017/03/06 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
Python写的英文字符大小写转换代码示例
2015/03/06 Python
Hadoop中的Python框架的使用指南
2015/04/22 Python
Python实现把数字转换成中文
2015/06/29 Python
python将字符串转换成json的方法小结
2019/07/09 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
Python代码注释规范代码实例解析
2020/08/14 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
安全生产工作汇报
2014/10/28 职场文书
个人道歉信大全
2019/04/11 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android
Java无向树分析 实现最小高度树
2022/04/09 Javascript