博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML5 CANVAS画图 beginPath和closePath
阅读量:5776 次
发布时间:2019-06-18

本文共 1599 字,大约阅读时间需要 5 分钟。

beginPath这个canvas函数我很早就讲过了,他的作用很简单,就是开始一段新路径,我们先来看下面的一小段代码:

var ctx = document.getElementById('cvs').getContext('2d');ctx.beginPath();ctx.moveTo(100.5,20.5);ctx.lineTo(200.5,20.5);ctx.stroke();ctx.moveTo(100.5,40.5);ctx.lineTo(200.5,40.5)ctx.strokeStyle = '#f00';ctx.stroke();

上面的代码会得到什么样的图形呢?是不是一条黑线一条红线呢?

从代码上看,我们的逻辑毫无问题,但结果是我们得到的是两条红线,并不是一黑一红。

如果你明白这是为什么,那后面的你就不用看了。这就是beginPath的重要性。

canvas中的绘制方法(如stroke,fill),都会以“上一次beginPath”之后的所有路径为基础进行绘制。比如上面的代码里面我stroke了两次,其实这两次都是以第一次beginPath后的所有路径为基础画的。也就是说第一条路径我们stroke了两下,第一下是黑的,第二下是红的,所以最终也是红的。

  1. 不管你用moveTo把画笔移动到哪里,只要不beginPath,那你一直都是在画一条路径。
  2. fillRect与strokeRect这种直接画出独立区域的函数,也不会打断当前的path.

如果你画出的图形和你想像的不一样,记得查看是否有合理的beginPath.

说到beginPath,就不得不提到closePath,两者是不是有很“紧”的联系呢?答案是几乎没有关系。

closePath的意思不是结束路径,而是关闭路径,它会试图从(MoveTo点之后)当前路径的终点连一条路径到起点,让整个路径闭合起来。但是,这并不意味着它之后的路径就是新路径了!

我们在上面的代码的第一个lineTo后面加上closePath,可以发现还是得到了两条红线。

但如果我们在第一个stroke后面加上beginPath,则会如愿得到一条黑线一条红线。

ctx.stroke();ctx.beginPath(); //注意啦!ctx.moveTo(100.5,40.5);ctx.lineTo(200.5,40.5)ctx.strokeStyle = '#f00';ctx.stroke();

总而言之,就是不要企图通过闭合现有路径来开始一条新路径,而开始一条新路径,以前的路径也不会闭合。

var ctx = document.getElementById('myCanvas').getContext('2d');        ctx.beginPath();        ctx.moveTo(100.5, 20.5);        ctx.lineTo(200.5, 20.5);        ctx.moveTo(110.5, 25.5);        ctx.lineTo(210.5, 25.5);        //ctx.stroke();        //ctx.beginPath();        //ctx.moveTo(100.5, 40.5);        ctx.lineTo(200.5, 40.5)        ctx.strokeStyle = '#f00';        ctx.closePath();        ctx.stroke();

结果如下:

ctx.moveTo(110.5, 25.5);与ctx.lineTo(200.5, 40.5)进行链接。

转载于:https://www.cnblogs.com/huaan011/p/5651806.html

你可能感兴趣的文章
javascript实现的一个信息提示的小功能/
查看>>
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
JS获取服务器时间并且计算距离当前指定时间差的函数
查看>>
java中关于重载与重写的区别
查看>>
最受欢迎的14款渗透测试工具
查看>>
华为硬件工程师笔试题
查看>>
jquery居中窗口-页面加载直接居中
查看>>
cd及目录快速切换
查看>>
黑马day11 不可反复度&解决方式
查看>>
分布式服务化系统一致性的“最佳实干”--转
查看>>
一次Mutex死锁的原因探究
查看>>
flask的文件上传和下载
查看>>
如何查看java class文件的jdk版本
查看>>
ImportError: cannot import name UnrewindableBodyError
查看>>
翻翻git之---有用的欢迎页开源库 AppIntro
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>
31-hadoop-hbase-mapreduce操作hbase
查看>>