canvas

学习 https://juejin.im/post/5986d6e1f265da3e241e8cdb#heading-18 所得

Canvas基本学习

什么是Canvas

canvas是HTML5新定义的标签,通过使用脚本来绘制图形。标签只是图形容器,相当于一个画布,canvas本身没有绘图能力。

默认情况下,canvas没有边框和内容。默认为300*150的画布。可以通过修改width和height来改变canvas画布的大小

<canvas id="canvas" width="1000px" height="1000px;"></canvas>

getContext()

context是一个封装了很多绘图功能的对象,我们在页面中创建了一个canvas标签之后,首先要使用getContext()获取canvas的上下文环境。

getContext(“2d”) 对象是内建的HTML5对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

canvas绘制图形

content.fill()

content.fill()填充当前的图形,默认为黑色。在填充前先使用fillStyle设置填充的颜色h或者渐变。并且如果路径未关闭,那么 fill() 方法会从路径结束点到开始点之间添加一条线,以关闭该路径(正如 closePath() 一样),然后填充该路径。

content.stroke()

troke() 方法会实际地绘制出通过 moveTo()lineTo() 方法定义的路径。默认颜色是黑色。在进行图形绘制前,要设置好绘图的样式

fillStyle() //填充的样式
strokeStyle() //边框的样式
context.fillWidth() //图形边框宽度

绘制矩形

// html
<canvas id="canvas"></canvas>

//javascript
var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
context.fillRect(0, 0, 100, 100)
context.strokeRect(100, 0, 100, 100)

[外链图片转存失败(img-WcbVgw6C-1565421891723)(D:\2019.5月秋招准备\面试题\1.png)]

在没有设置颜色的情况下, 默认是黑色的

通过以下方法修改颜色

context.fillStyle = "pink"
context.strokeStyle = "blue"
context.fillRect(0, 0, 100, 100)
context.strokeRect(100, 0, 100, 100)

在这里插入图片描述

清除矩形区域

clearRect(x, y, width, height)
  • x,y 是坐标
  • width, height是宽高
var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
context.fillRect(0, 0, 100, 100)
context.strokeRect(120, 0, 100, 100)
context.fillStyle = "pink"
context.strokeStyle = "darkred"
context.fillRect(0, 120, 100, 100)
context.strokeRect(120, 120, 100, 100)
context.clearRect(50, 50, 120, 120)

在这里插入图片描述

实心圆

context.arc(x, y, radius, starAngle, endAngle, anticlockwise)

  • starAngle 开始角度
  • endAngle 结束角度
  • anticlockwise 是否逆时针, true为逆时针,false为顺时针
context.beginPath()
context.arc(300, 350, 100, 0, Math.PI * 2, true)
//不关闭路径,路径会一直保留下去
context.closePath()
context.fillStyle = "pink"
context.fill()

在这里插入图片描述

圆弧

不填充颜色,就是圆弧了~

由于使用了关闭路径,所以绘制完毕

var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
context.beginPath()
context.arc(300, 350, 100, 0, Math.PI, true)
context.closePath()
context.strokeStyle = "pink"
context.stroke()

在这里插入图片描述

如果没有关闭路径,则不会停止

var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
context.beginPath()
context.arc(300, 350, 100, 0, Math.PI, true)

context.strokeStyle = "pink"
context.stroke()

在这里插入图片描述

  • 系统默认在绘制第一个路径的开始点为beginPath
  • 如果画完前面的路径没有重新指定beginPath,那么画第其他路径的时候会将前面最近指定的beginPath后的全部路径重新绘制
  • 每次调用context.fill()的时候会自动把当次绘制的路径的开始点和结束点相连,接着填充封闭的部分

如果第一个圆弧没有closePath,第二个圆弧没有重新定义beginPath,会出现效果

在这里插入图片描述

绘制线段

  • moveTo(x,y) : 把路径移动到画布中的指定点,不创建线段
  • lineTo(x,y) : 添加一个新点,然后在画布中创建从该点到最后指定点的线条
var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
context.strokeStyle = "red"
context.moveTo(0, 0)
context.lineTo(100, 100)
context.stroke()

在这里插入图片描述

如果没有moveTo,那么第一次lineTo的效果和moveTo一样

var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
context.strokeStyle = "red"
context.lineTo(100, 0)
context.lineTo(100, 100)
context.stroke()

在这里插入图片描述

如果每次lineTo后面没有moveTo,那么下次lineTo的开始点为前一次lineTo的结束点

线性渐变

var lg = context.createLinearGradient(xStart, yStart, xEnd, yEnd)
lg.addColorStop(offset, color)

  • xstart:渐变开始点x坐标
  • ystart:渐变开始点y坐标
  • xEnd:渐变结束点x坐标
  • yEnd:渐变结束点y坐标
  • offset:设定的颜色离渐变结束点的偏移量(0~1)
  • color:绘制时要使用的颜色
var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
var g1 = context.createLinearGradient(0, 0, 0,300)
g1.addColorStop(0, '#E55D87')
g1.addColorStop(1,'#5FC3F4')
context.fillStyle = g1
context.fillRect(0, 0, 400, 300)

在这里插入图片描述

**插曲 **

也可以使用background: linear-gradient来实现渐变~

background: linear-gradient(#E55D87 20%, #5FC3F4 80% )

在这里插入图片描述

径向渐变

var rg = context.createRadialGradient(xStart, yStart, radiusStart, xEnd, yEnd, radiusEnd)

rg.addColorStop(offset, color)

  • xStart:发散开始圆心x坐标

  • yStart:发散开始圆心y坐标

  • radiusStart:发散开始圆的半径

  • xEnd:发散结束圆心的x坐标

  • yEnd:发散结束圆心的y坐标

  • radiusEnd:发散结束圆的半径

  • offset:设定的颜色离渐变结束点的偏移量(0~1)

  • color:绘制时要使用的颜色

    例如一个同心圆径向渐变

var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
var g1 = context.createRadialGradient(200, 150, 0, 200, 150, 200)
g1.addColorStop(0.1, '#F09819')
g1.addColorStop(1, '#EDDE5D')
context.fillStyle = g1
context.beginPath()
context.arc(200, 150, 100, 0, Math.PI * 2, true)
context.closePath()
context.fill()

在这里插入图片描述

图形变形

缩放

scale(x, y)

旋转

rotate(angle)

平移

translate(x, y)

阴影

shadowOffsetX 设置或返回阴影距形状的水平距离 (默认值为0)

shadowOffsetY 设置或返回阴影距形状的垂直距离 (默认值为0)

shadowColor 设置或返回用于阴影的颜色

shadowBlur 设置或返回用于阴影的模糊级别 (值越大越模糊)

例子 绘制一个10半径的小球,其阴影也为白色! 如下图所示,有一种发光的感觉 很好看

var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
context.fillStyle = 'white'
context.beginPath()
context.arc(100, 100, 10, 0, Math.PI * 2)
context.shadowColor = 'white'
context.shadowBlur = 10
context.fill()
context.closePath()

在这里插入图片描述

绘制文字

fillText(text, x, y) 绘制实心文字

strokeText() 绘制文字描边 (空心)

textAlign 设置或返回文本内容的当前对齐方式

textBaseline 设置或返回在绘制文本时使用的当前文本基线

font: 设置或返回文本内容的当前字体属性

var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")
context.font = "40px Arial"
context.fillText("LilyChenlin", 200, 200)
context.strokeText("LilyChenlin", 200, 300)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值