canvas里的beginPath和closePath什么时候运用?

canvas的时刻,纠结的不是种种图形怎样绘制 ,反而是beginPath()closePath()这两个函数什么时刻用,它们究竟做了什么。

起首,这里说的是2D衬着的状况, 即CanvasRenderingContext2D对象(2D衬着上下文, 这个翻译觉得好拗口)。

要明白的一点是,用canvas绘图的思绪:经由过程绘制途径来绘制图形,途径是一系列点的鸠合 。PS里有个钢笔东西,跟这个就很像,我们会先用钢笔东西把途径画出来,然后能够挑选添补或许描边。

搞不清楚观点的时刻就细致去看观点:

beginPath()

CanvasRenderingContext2D.beginPath() 是 Canvas 2D API 经由过程清空子途径列表最先一个新途径的要领。 当你想建立一个新的途径时,挪用此要领。

在我们绘制途径的时刻,实际上会有一个途径列表帮我们记载当前所画的的子途径,而这整一个列表就是我们当前绘制的途径。那末子途径是什么鬼呢?意义就是比方你东画一条线,西画一条线,中心还画了一条线,这三条线就是子途径,它们没必要首尾相连,能够订交也能够不订交。当你挪用beginPath()要领的时刻,就会把这全部列表清空,不管你有无fill()或许stroke(),一切死啦死啦地。

closePath()

CanvasRenderingContext2D.closePath() 是 Canvas 2D API 将笔点返回到当前子途径起始点的要领。它尝试从当前点到起始点绘制一条直线。 假如图形已是关闭的或许只要一个点,那末此要领不会做任何操纵。

注重,是子途径。这里的定义已说得比较清楚了,就没什么必要赘述了。

绘制途径

明白了它们的定义后,怎样用的话内心应当也有一个大抵的观点了。另有必要说一下moveTo()的定义

CanvasRenderingContext2D.moveTo()是 Canvas 2D API 将一个新的子途径的起始点移动到(x,y)坐标的要领。

注重,是子途径。所以绘制一条途径(能够包含多便条途径)的划定规矩就是:

  1. beginPath()一下

  2. 先绘制一便条途径。有必要moveTo()的就moveTo,然后挪用响应绘制函数,末了有必要closePath()的就closePath。绘制多条就依样画葫芦。

  3. 添补fill()或许描边stroke(), 或许二者一升引。

  • 对划定规矩2的诠释:为何说有必要moveTo和closePath才做响应的操纵呢?closePath好明白,我就是想纯真的画一条途径出来罢了,那就没必要闭合了。至于moveTo,这取决于你想要画的结果,就是字面的你想从哪一个点最先画呢?比方用arc()画一个扇形,你就得先把起始点移到原点,不然就会画成一个像拱桥的弓形了,点击检察相干实例

  • 对划定规矩3的诠释:由于之前画的途径只是记载了一系列点的位置,并没有真正画出来,所以末了要挪用函数来衬着

末了,注重有些要领会自动闭合途径,比方fill()clip()。这也很好明白,由于这两个要领都是作用于一块地区,不闭合的话计算机那里晓得你要对哪块地区举行操纵呢?这时刻就能够不必挪用closePath()了。stroke()不会自动闭合途径。点击检察相干实例

注:以上api的定义均来自MDN

    原文作者:acfasj
    原文地址: https://segmentfault.com/a/1190000010330319
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞