English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
HTML5 O caminho do canvas é usado no HTML5Desenhar vários tipos de formas (linhas, círculos, polígonos, etc.) no canvas, o caminho é usado no HTML5Desenhar vários tipos de formas no canvas
HTML5 O caminho do canvas é uma série de pontos, entre os quais há instruções de desenho. Por exemplo, uma série de pontos pode ter uma linha entre eles, ou podem haver arcos.
O caminho é usado no HTML5Desenhar vários tipos de formas (linhas, círculos, polígonos, etc.) no canvas é importante para entender esse conceito central.
Usando2O contexto superior função beginPath() e pode começar e terminar o caminho.closePath(), conforme mostrado a seguir:
var canvas = document.getElementById("ex1; ");2var context = canvas.getContext(" // d");context.beginPath(); context.closePath();
moveTo()2Ao usar o desenho de caminho, você usa um 'pincel' virtual ou 'ponteiro'. O ponteiro virtual sempre está em algum ponto. Usando
context.moveTo(10,10);
A função Context move o ponteiro virtual para o ponto moveTo(x, y), conforme mostrado a seguir:10,10.
Este exemplo move o ponteiro para o ponto
context.beginPath(); context.moveTo(10,10); context.lineTo(50,50); context.closePath();
A função lineTo() desenha uma linha do ponto da posição do ponteiro virtual até o ponto passado como parâmetro para a função lineTo(). Este é um exemplo:10,10Este exemplo move o ponteiro para o ponto5, e então desenha uma linha daquele ponto até o ponto50,
0.50,5lineTo() também move o ponteiro virtual para o final da linha. Portanto, no exemplo acima, o ponteiro se move para
fill()2no seu comando2O contexto superior stroke() ou fill() não desenha nenhum caminho antes de desenhar o caminho. Chamando2A operação é concluída no contexto superior.
A função stroke() desenhará a contorno da forma definida pelas operações de caminho.
A função fill() preencherá a forma definida pelas operações de caminho.
Este é um exemplo dos dois, stroke() e fill() aplicados à mesma forma:
<canvas id="ex1" width="500" height="75" style="border: 1px sólido #cccccc;"> HTML5 Canvas não suportado </canvas> <script> var canvas = document.getElementById("ex1");var context = canvas.getContext("2d"); context.beginPath(); context.moveTo(10,10); context.lineTo(60,50); context.lineTo(110,50); context.lineTo(10,10); context.stroke(); context.closePath(); context.beginPath(); context.moveTo(100,10); context.lineTo(150,50); context.lineTo(200,50); context.lineTo(100,10); context.fill(); context.closePath();</script>Teste e veja ‹/›
Este é o resultado da execução do código acima:
Você pode usar lineWidth 2A propriedade de contexto define os diferentes traços de função e a largura das linhas desenhadas. Este é um exemplo:
context.lineWidth = 10;
上面的示例将所有后续笔画绘制操作的线宽设置为10Os exemplos acima configuram a largura da linha para todas as operações subsequentes de desenho de traços.
pixels.1,5e10Essas três linhas têm larguras diferentes de
:1Quando a largura da linha for maior do que10,10até100,10Desenha uma linha com largura de10, então a linha realmente será10,5Começa e se estende até10,15, e então se estende horizontalmente até100,5e100,15Daí. Como um retângulo.
Quando se desenha uma linha usando um caminho, pode-se configurar o lineCap da linha. O lineCap define como o final da linha é desenhado.
A largura da linha é definida pelo lineCap2A propriedade lineJoin do contexto D pode ser configurada para os seguintes valores:
butt
round
square
O valor butt faz com que o final da linha seja plano e perpendicular à linha.
O valor round produz um final de linha arredondado, com o raio da curva igual à metade da largura da linha.
O valor square faz com que se desenhe um retângulo no final da linha, com o tamanho de largura x largura da linha. / 2.
Aqui está um conjunto de exemplos que ilustram o lineCap. A largura de todas as linhas é10. A linha mais à esquerda usa o valor lineCap butt. A linha central usa o valor lineCap round. A linha mais à direita usa o valor lineCap square
Os valores butt e square de lineCap podem ser um pouco difíceis de ver a diferença entre eles na linha. Portanto, criei alguns exemplos de linhas usando butt e square, que são desenhadas próximas umas das outras para que você possa ver a diferença. No topo ou na esquerda use butt, na parte inferior ou na direita use square.
Como você pode ver, a linha square com valor lineCap desenha um retângulo extra no final, o que faz a linha parecer um pouco maior.
lineJoin 2A propriedade lineJoin define como os pontos de conexão entre duas linhas são desenhados no contexto D. O ponto de conexão entre duas linhas é chamado de "conexão de linha". A propriedade lineJoin pode ter os seguintes valores:
miter
bevel
round
Aqui estão três exemplos de código para configurar a conexão de linha:
context.lineJoin = "miter"; context.lineJoin = "bevel"; context.lineJoin = "round";
O valor do resultado miter faz com que se desenhem cantos retos nas conexões de linha.
O valor do resultado bevel faz com que se desenhem cantos retos nas conexões de linha.
O valor do resultado round faz com que se desenhem cantos arredondados nas conexões de linha.
Aqui estão três exemplos (começando da esquerda) miter, bevel e round, usados como valores da propriedade lineJoin.
2A função arc() do contexto D desenha arcos no canvas.
A função arc() utiliza6parâmetros:
x: Coordenada x do ponto central do arco
y: Coordenada y do ponto central do arco
radius: Raio do arco
startAngle: Ângulo de radianos do início do arco
endAngle: Ângulo de radianos do final do arco
anticlockwise: Define se a direção de inserção é anti-horária (não horária).
Este é um exemplo de código:
context.lineWidth = 3; var x = 50; var y = 50; var radius = 25; var startAngle = (Math.PI / 180) * 45; var endAngle = (Math.PI / 180) * 90; var anticlockwise = false; context.beginPath(); context.arc(x, y, radius, startAngle, endAngle, anticlockwise); context.stroke(); context.closePath();
Este exemplo de código desenha um arco com o centro de50,50, com raio de25pixels, a partir de45graus, se estende até180 graus. Você pode ter notado que, a partir de 0 até36O 0 graus será convertido para radianos.
Aqui está a aparência do exemplo de código desenhado na tela:
Este é o mesmo exemplo de código, mas com anticlockwise configurado para true:
Para desenhar um círculo completo, configure simplesmente startAngle para 0 e endAngle para2 * Math.PI é igual a (Math.PI / 180) * 360
2O contexto D tem umarcTo()
mas pode usarfunção lineTo()
epara imitar sua funçãoarc()
Portanto, vou pular isso
A função quadraticCurveTo() desenha uma curva de Bezier quadrática de um ponto para outro. A curva é controlada por um único ponto de controle. Este é um exemplo de código:
context.lineWidth = 3; var fromX = 50; var fromY = 50; var toX = 100; var toY = 50; var cpX = 75; var cpY = 100; context.beginPath(); context.moveTo(fromX, fromY); context.quadraticCurveTo(cpX, cpY, toX, toY); context.stroke(); context.closePath();
Este exemplo de código usa pontos de controle75,100 (cpX, cpY) desenha uma linha de50,5De 0 até100,5A curva de 0. O resultado da curva é conforme mostrado a seguir:
Os pequenos pontos na tela são os pontos de controle que eu desenhei aqui. Eles geralmente não fazem parte da curva.
A função bezierCurveTo() desenha uma curva de Bezier cúbica de um ponto para outro. A curva de Bezier cúbica tem2pontos de controle, enquanto a curva de Bezier quadrática possui apenas1pontos de controle. Este é um exemplo de código:
context.lineWidth = 3; var fromX = 50; var fromY = 50; var toX = 300; var toY = 50; var cp1X = 100; var cp1Y = 100; var cp2X = 250; var cp2Y = 100; context.beginPath(); context.moveTo(fromX, fromY); context.bezierCurveTo(cp1X, cp1Y, cp2X, cp2Y, toX, toY); context.stroke(); context.closePath();
Este exemplo de código usa pontos de controle100,100 (cp1X, cp1Y) e250,100 (cp2X, cp2Y) desenha a partir de50,5De 0 até300,5A curva de 0. O resultado da curva é conforme mostrado a seguir:
Os dois pequenos pontos na tela são os pontos de controle que eu desenhei, usados para mostrar a sua posição. Eles não são desenhados como parte da curva.
Este é um exemplo que usa diferentes pontos de partida, fim e controle:
context.lineWidth = 3; var fromX = 50; var fromY = 50; var toX = 300; var toY = 50; var cp1X = 100; var cp1Y = 10; var cp2X = 250; var cp2Y = 100; context.beginPath(); context.moveTo(fromX, fromY); context.bezierCurveTo(cp1X, cp1Y, cp2X, cp2Y, toX, toY); context.stroke(); context.closePath();
Esta é a curva correspondente:
Da mesma forma, dois pontos são pontos de controle de renderização claros