lineTo(x,y) 定义线条结束坐标

moveTo(x,y) 定义线条开始坐标

ctx.stroke();绘制空心图形

ctx.fill();填充图形 把当前路径环绕起来的区域进行填充

ctx.fillStyle 填充颜色

ctx.strokeStyle 绘制图形颜色

ctx.closePath();//让图形闭合,防止锯齿

ctx.beginPath();// // 一个画布内画多个图形,放了防止重绘之前的路径,所以先把之前的路径清除掉

非零环绕原则:

a 是用来判断哪些区域属于路径内( 计算结果非0,即为路径内 )。

b 在路径包围的区域中,随便找一点,向外发射一条射线,
c 和所有围绕它的边相交,
d 然后开启一个计数器,从0计数,
e 如果这个射线遇到顺时针围绕,那么+1,
f 如果遇到逆时针围绕,那么-1,
g 如果最终值非0,则这块区域在路径内。
备注:基数边的区域一定在路径内。

先填充与先描边

描边的时候会占用原图形的一部分(线宽的一半)

为了让线宽符合要求,最好先填充再描边,防止填充时覆盖掉线宽的一半

ctx.fill();   ctx.stroke();

canvas在绘制线条的时候,会向左或向右偏移线宽的一半,然后进行绘制

如果线宽为奇数,边缘颜色会变浅

设置线帽样式:

ctx.lineCap='butt'、'round'、'square'

butt是默认值

round线头是圆的

square线头两段各增加线宽的一半

设置交点样式

ctx.lineJoin = ‘miter' 、'round'、'bevel'

miter是默认值,两边向外延伸相交为尖尖角,
round是圆头,
bevel两边相连为一个斜面。

内置矩形的API

ctx.rect(起点x,起点y,宽,高)

绘制一个描边矩形

ctx.strokeRect(起点x,起点y,宽,高);

绘制一个填充矩形

ctx.fillRect(起点x,起点y,宽,高);

按照矩形的大小清除画布中指定位置的内容

ctx.clearRect(起点x,起点y,宽,高);

绘制虚线

ctx.setLineDash([5,3]);设置画线的时候空白部分和实现部分的大小 5像素实线,3像素空白

画弧( 画的是路径 )

ctx.arc( 圆心x轴坐标,圆心y轴坐标,半径, 起点弧度,结束点弧度,是否逆时针画(可选) )

设置文字的属性
 ctx.font = 和css语法一样。
 注意:这里设置字体大小时必须带单位,单位支持css的所有表示方式。
注意:单独设置字体大小不会生效,必须要加一个额外属性样式。
  ctx.font = '2rem 微软雅黑';

绘制描边文字:
 ctx.strokeText( 文字, 参考x轴坐标,参考y轴坐标,限制文字的最大长度(可选) )

ctx.strokeText( '嘻嘻嘻嘻嘻嘻', 100, 100 );

绘制填充文字:
ctx.fillText( 文字, 参考x轴坐标,参考y轴坐标,限制文字的最大长度(可选) )

ctx.fillText( '咯咯咯咯咯咯', 100, 200 );

设置文字的水平对其方式:
ctx.textAlign = 'left || start' 、 'right || end' 、 'center'
默认值为start。

设置文字的垂直对其方式:
ctx.textBaseline = 'top' 、'bottom'、'middle'、'alphabetic'、'hanging'、'ideographic'
默认值为alphabetic。

状态保存:

ctx.save();

 把当前的状态(绘制环境的所有属性)copy一份进行保存。

状态回滚:
ctx.restore();
把最近保存的一次状态作为当前状态。

ctx.drawImage()绘制图像,有三种使用方式。

第一种,三参数版本:把图像绘制到指定的坐标。 必须要在img图像下载完毕之后使用img.onload = function() {    ctx.drawImage( img, 10, 10 );}

 第二种,五参数版本: 把图像绘制到指定的坐标,并指定其大小。 必须要在img图像下载完毕之后使用img.onload = function() {    ctx.drawImage( img, 10, 10, 200, 200 );} 第三种,九参数版本: 把裁剪到的部分图像绘制到指定的坐标,并指定其大小。 必须要在img图像下载完毕之后使用img.onload = function() {    ctx.drawImage( img,            0, 0, 400, 400,            100, 100, 400, 400 );}
ctx.isPointInPath()判断点是否在路径内(路径必须绘制出来才可以
比如this.ctx.rect();然后必须this.ctx.stroke()才可以
requestAnimationFrame

请求动画帧函数,这个函数和setTimeout方法使用类似,
 他都是定时器,却别在于setTimeout可以自由指定回调的触发时间,
 而requestAnimationFrame函数回调的触发是由浏览器来控制的。
 requestAnimationFrame( callback )
 备注:当浏览器重绘页面的时候,就会调用这个callback,
 这样callbackg的执行就会比较稳定,适合用来做流畅的动画。

用法:

(function con() {
console.log(111);
requestAnimationFrame( con );
}());

 

转载于:https://www.cnblogs.com/zmshare/p/6672239.html

canvas一些属性相关推荐

  1. android canvas画渐变背景,View绘制系列(13)-Canvas渐变属性绘制

    Canvas渐变属性绘制 五颜六色,七彩缤纷.有时候我们的UI设计稿也极尽色彩之能,比如下图这样: 这种渐变效果我们能画吗?不得不说,Android系统的基础构架还是很强大的,我们可以使用Linear ...

  2. 用Canvas和属性动画造一只萌蠢的“小鬼”

    最近没事的时候想自己写一个支持下拉刷新,上拉加载的自定义View.写着写着,就觉得最常见的"一个圈转啊转"的进度条太普通了. 于是,就想看看有没有更有趣的一点的加载效果.在GitH ...

  3. linux修改index属性,WPF 通过设置Canvas.ZIndex属性修改图像的图层

    WPF 通过设置Canvas.ZIndex属性修改图像的图层 WPF 通过设置Canvas.ZIndex属性修改图像的图层 对Canvas.ZIndex,MSDN的解释是:获取或设置 Canvas 中 ...

  4. WPF 通过设置Canvas.ZIndex属性修改图像的图层

    对Canvas.ZIndex,MSDN的解释是:获取或设置 Canvas 中对象的 z 顺序呈现行为. 并附有以下示例代码: <Grid x:Name="LayoutRoot" ...

  5. canvas画布属性globalAlpha 和 createRadialGradient函数出现的设置问题

    今天用canvas做了一个页面特效,呼呼,在做的过程中发现createRadialGradient 和 globalAlpha这2个属性一起使用导入不能实现透明度问题,首先把createRadialG ...

  6. Delphi 10.3.3 演示FMX TBitmap.Canvas绘图属性和方法

    这个例子展示了如何使用TBitmap.Canvas属性.这个示例在图像上绘制了一个矩形. 要构建和测试这个例子,请创建一个多设备应用程序--Delphi,然后将下一个对象添加到表单中. 一个TImag ...

  7. HTML5中canvas画布属性,html5 Canvas之画布合成的属性总结

    首先解释一下合成的含义,合成是指如何精细控制画布上面的对象的透明度和分层效果.其中控制Canvas画布合成的操作的两个属性分别是:globalAlpha和globalCompositeOperatio ...

  8. HTML canvas font 属性

    定义和用法 font 属性设置或返回画布上文本内容的当前字体属性. font 属性使用的语法与 CSS font 属性 相同. 默认值: 10px sans-serif JavaScript 语法: ...

  9. html5 strokestyle,HTML canvas strokeStyle 属性 - JavaScript 参考手册 - 自强学堂

    实例 绘制一个矩形.请用红色的笔触颜色:YourbrowserdoesnotsupporttheHTML5canvastag. JavaScript: var c=document.getElemen ...

最新文章

  1. Java使用POI读取和写入Excel指南
  2. hexo d 部署博客时出错
  3. BZOJ 1208 宠物饲养所 Splay
  4. 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP
  5. 执行后rosrun 显示找不到包 [rospack] Error: package ‘pluming_param_server‘ not found
  6. 震惊世界的亚洲8大奇迹,你都知道几个?
  7. 【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】...
  8. 详解static、volatile、const
  9. c语言搬山游戏,C语言实现搬山游戏代码解析
  10. Composer的Autoload源码实现2——注册与运行
  11. 中国数码相机镜头行业市场供需与战略研究报告
  12. prim算法_数据结构 7.4.1 最小生成树 Prim
  13. linux中ffmpeg实现视频的转吗,Linux系统下视频转换ffmpeg
  14. 2010.11.13网规论文关注点
  15. ArcGIS 纵断面分析
  16. 联想笔记本 插电源 拔电源 黑屏问题解决。
  17. [转]现代汉语词性分类
  18. Minecraft Mod 开发:3-第一个物品
  19. 路由器WIFI密码怎么设置?快速设置,只需1分钟
  20. 链接计算机网络密码错误,手机连不上路由器显示密码错误怎么办?

热门文章

  1. jenkins--Jenkins+Git+coding+maven 实现自动化测试持续集成
  2. python 插值_有序点列的样条插值
  3. oracle环境变量怎么配,oracle环境变量配置-Oracle
  4. 【第4篇】Python爬虫实战-抓取B站弹幕视频
  5. 前后端分离的用户验证原理及Spring Boot + JWT的框架搭建(附完整的框架代码)之一
  6. 读取XML文件报 - Content is not allowed in prolog
  7. Extjs 实战之 Ext.tree.TreePanel Tree无法显示
  8. 计算机信息工程专业985,信息工程学院
  9. 方法 手写promise_手写Promise类
  10. IDEA连接PostgreSQL数据库