Canvas学习记录:画布设置及简单图形绘制

概览

<canvas>是一个可以使用脚本(通常为JavaScript)来绘制图形的 HTML 元素
类似<img>,但只有两个属性:widthheight
(初始化为 width: 300px , height:150px)

用width和height属性为明确规定宽高,而不是使用CSS。

getContext() :获得渲染上下文和它的绘画功能

检查浏览器是否支持:

HTML:

<canvas id="tutorial" width="150" height="150"></canvas>

JS:

var canvas = document.getElementById('tutorial');

if (canvas.getContext){
  var ctx = canvas.getContext('2d');
  // drawing code here
} else {
  // canvas-unsupported code here
}

图形绘制

画布栅格:
画布栅格
1. 矩形

fillRect(x, y, width, height): 绘制一个填充的矩形
strokeRect(x, y, width,height) :绘制一个矩形的边框
clearRect(x, y, width, height) 清除指定矩形区域,让清除部分完全透明。

实例:

function draw() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext) {
    var ctx = canvas.getContext('2d');

    ctx.fillRect(25, 25, 100, 100);
    ctx.clearRect(45, 45, 60, 60);
    ctx.strokeRect(50, 50, 50, 50);
  }
}

显示:
在这里插入图片描述
另有:

rect(x, y, width, height) //绘制一个左上角坐标为(x,y),宽高为width以及height的矩形。

2. 路径绘制

beginPath()
新建一条路径,生成之后,图形绘制命令被指向到路径上生成路径。
(调用beginPath()之后,或者canvas刚建的时候,第一条路径构造命令通常被视为是moveTo())
closePath()
闭合路径之后图形绘制命令又重新指向到上下文中。
(绘制一条从当前点到开始点的直线来闭合图形)
stroke()
通过线条来绘制图形轮廓。
fill()
通过填充路径的内容区域生成实心的图形。
(调用fill()函数时,所有没有闭合的形状都会自动闭合,所以你不需要调用closePath()函数。但是调用stroke()时不会自动闭合。)

3. 三角形

function draw() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext) {
    var ctx = canvas.getContext('2d');

    ctx.beginPath();
    ctx.moveTo(75, 50);
    ctx.lineTo(100, 75);
    ctx.lineTo(100, 25);
    ctx.fill();
  }
}

显示:
在这里插入图片描述

4. 移动笔触

moveTo(x, y)

将笔触移动到指定的坐标x以及y上。
常用于:

  1. beginPath()调用后,设置起点。
  2. 绘制不连续的路径。

5. 直线lineTo(x, y)

6. 圆弧arc(x, y, radius, startAngle, endAngle, anticlockwise)

(x,y) 为绘制圆弧所在圆上的圆心坐标
radius为半径
startAngle / endAngle : 用弧度定义了开始以及结束的弧度(以x轴为基准)
anticlockwise为一个布尔值:为true时,是逆时针方向,否则顺时针方向

弧度=(Math.PI/180)*角度。

实例:ctx.arc(75,75,50,0,Math.PI*2,true) //一个整圆

7. 贝塞尔曲线

用来绘制复杂有规律的图形 :

quadraticCurveTo(cp1x, cp1y, x, y)

绘制二次贝塞尔曲线,cp1x,cp1y为一个控制点,x,y为结束点。

bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

绘制三次贝塞尔曲线,cp1x,cp1y为控制点一,cp2x,cp2y为控制点二,x,y为结束点。
在这里插入图片描述

使用Path2D对象

使用Path2D对象而不是当前路径。在这里,带路径参数的stroke和fill可以把对象画在画布上。

function draw() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext){
    var ctx = canvas.getContext('2d');

    var rectangle = new Path2D();  //矩形对象
    rectangle.rect(10, 10, 50, 50);  

    var circle = new Path2D();   //圆形对象
    circle.moveTo(125, 35);
    circle.arc(100, 35, 25, 0, 2 * Math.PI);

    ctx.stroke(rectangle);   //矩形描边
    ctx.fill(circle);    //圆形填充
  }
}

显示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值