Canvas 入门

96 阅读2分钟

基本介绍

HTML5 <canvas> 标签用于绘制图像(通过脚本,通常是 JavaScript)。

不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - 您必须使用脚本来完成实际的绘图任务。

getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。

创建画布

html中创建一个画布,并在js中获取到canvas元素后创建对象。

// html
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
您的浏览器不支持 HTML5 canvas 标签。
</canvas>

// js
var c=document.getElementById("myCanvas");
// getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
var ctx=c.getContext("2d");

坐标

Canvas为一个矩形,左上角坐标为(0,0),右下角坐标为(width, height),也就是画布的宽高

笔触设置

  • 笔触的颜色、渐变或模式。

// 默认值为 "#000000"
ctx.strokeStyle="#FF0000";

// 渐变设置
1. 创建线性渐变的起点和终点(确认渐变方向)和添加颜色
var gradient=ctx.createLinearGradient(x0,y0,x1,y1);
gradient.addColorStop("0","magenta");
gradient.addColorStop("0.5","blue");
gradient.addColorStop("1.0","red");

2.把渐变赋值给笔触 或者使用渐变填充
ctx.strokeStyle = gradient
//
ctx.fillStyle= gradient

  • 线条颜色

属性描述
lineCap设置或返回线条的结束端点样式。
lineJoin设置或返回两条线相交时,所创建的拐角类型。
lineWidth设置或返回当前的线条宽度。
miterLimit设置或返回最大斜接长度。

画路径(线)

画一条线要用到三个方法

  • moveTo(x0,y0) 定义线的起点,路径移动到画布中的指定点,不创建线条。
  • lineTo(x1,y1) 定义线的终点
  • stroke() 绘制已定义的路径
var c=document.getElementById("myCanvas"); 
var ctx=c.getContext("2d"); 
ctx.moveTo(0,0); 
ctx.lineTo(200,100); 
ctx.stroke();

画矩形

画一个矩形用到两个方法或者是一个

  1. rect(x,y,width,height) stroke() (无填充的矩形)

  2. strokeRect(x,y,width,height) (无填充的矩形)

  3. fillRect(x,y,width,height) (默认黑色填充的矩形) x,y 为矩形的左上角位置,width,htight为矩形的高宽

var c=document.getElementById("myCanvas"); 
var ctx=c.getContext("2d"); 
// 1.
ctx.rect(0,0,100,100); 
ctx.stroke()

//2.
ctx.strokeRect(120,0,100,100); 

// 3.
ctx.fillRect(240,0,100,100); 

画圆

画一个圆(弧)用到两个方法

  • carc(x,y,r,sAngle,eAngle,counterclockwise) x,y 为圆心在画布的位置, r 为半径 ,sAngle,eAngle 分别为开始的角度和结束角度,counterclockwise 画圆(弧)的方向 true 为顺时针, false 为逆时针
  • stroke() 绘制已定义的路径

image.png

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.arc(95,50,40,0,2*Math.PI);
ctx.stroke();

总结

绘制一个有描边无填充的图像时,会使用stroke()方法。 绘制一个无描边填充的图像,使用fill()方法 绘制一个有描边有填充的图像,以上的两个方法都需要使用。