Canvas 是 HTML5 提供的一个用于展示绘图效果的标签. Canvas 原意为画布, 在 HTML 页面中用于展示绘图效果. 最早 Canvas 是苹果提出的一个方案, 今天已经在大多数浏览器中实现。 canvas 的使用领域 - 游戏
- 大数据可视化数据
- banner 广告
- 多媒体
- 模拟仿真
- 远程操作
- 图形编辑
判断浏览器是否支持 canvas 标签 - var canvas = document.getElementById('canvas')
- if (canvas.getContext) {
- console.log('你的浏览器支持Canvas!')
- } else {
- console.log('你的浏览器不支持Canvas!')
- }
复制代码 canvas 的基本用法1、使用 canvas 标签, 即可在页面中开辟一格区域,可以设置其宽高,宽高为 300 和 150 2、获取 dom 元素 canvas canvas 本身不能绘图. 是使用 JavaScript 来完成绘图. canvas 对象提供了各种绘图用的 api。 - var cas = document.querySelector('canvas')
复制代码3、通过 cas 获取上下文对象(画布对象!) - var ctx = cas.getContext('2d')
复制代码4、通过 ctx 开始画画(设置起点 设置终点 连线-描边 ) - ctx.moveTo(10, 10)
- ctx.lineTo(100, 100)
- ctx.stroke()
复制代码 绘制线条- 设置开始位置: context.moveTo( x, y )
- 设置终点位置: context.lineTo( x, y )
- 描边绘制: context.stroke()
- 填充绘制: context.fill()
- 闭合路径: context.closePath()
canvas 还可以设置线条的相关属性,如下: - CanvasRenderingContext2D.lineWidth 设置线宽.
- CanvasRenderingContext2D.strokeStyle 设置线条颜色.
- CanvasRenderingContext2D.lineCap 设置线末端类型,'butt'( 默认 ), 'round', 'square'.
- CanvasRenderingContext2D.lineJoin 设置相交线的拐点, 'miter'(默认),'round', 'bevel',
- CanvasRenderingContext2D.getLineDash() 获得线段样式数组.
- CanvasRenderingContext2D.setLineDash() 设置线段样式.
- CanvasRenderingContext2D.lineDashOffset 绘制线段偏移量.
封装一个画矩形的方法 - function myRect(ctxTmp, x, y, w, h) {
- ctxTmp.moveTo(x, y)
- ctxTmp.lineTo(x + w, y)
- ctxTmp.lineTo(x + w, y + h)
- ctxTmp.lineTo(x, y + h)
- ctxTmp.lineTo(x, y)
- ctxTmp.stroke()
- }
- var cas = document.querySelector('canvas')
- var ctx = cas.getContext('2d')
- myRect(ctx, 50, 50, 200, 200)
复制代码 绘制矩形- fillRect( x , y , width , height) 填充以(x,y)为起点宽高分别为 width、height 的矩形 默认为黑色
- stokeRect( x , y , width , height) 绘制一个空心以(x,y)为起点宽高分别为 width、height 的矩形
- clearRect( x, y , width , height ) 清除以(x,y)为起点宽高分别为 width、height 的矩形 为透明
绘制圆弧绘制圆弧的方法有 - CanvasRenderingContext2D.arc()
- CanvasRenderingContext2D.arcTo()
6 个参数: x,y(圆心的坐标),半径,起始的弧度(不是角度 deg),结束的弧度,(bool 设置方向 ! ) - var cas = document.querySelector('canvas')
- var ctx = cas.getContext('2d')
- ctx.arc(100, 100, 100, 0, degToArc(360))
- ctx.stroke()
- // 角度转弧度
- function degToArc(num) {
- return (Math.PI / 180) * num
- }
复制代码绘制扇形 - var cas = document.querySelector('canvas')var ctx = cas.getContext('2d')
- ctx.arc(300, 300, 200, degToArc(125), degToArc(300))// 自动连回原点ctx.closePath()
- ctx.stroke()function degToArc(num) { return (Math.PI / 180) * num
- }
复制代码 制作画笔- 声明一个变量作为标识
- 鼠标按下的时候,记录起点位置
- 鼠标移动的时候,开始描绘并连线
- 鼠标抬起的时候,关闭开关
- var cas = document.querySelector('canvas')
- var ctx = cas.getContext('2d')
- var isDraw = false
- // 鼠标按下事件
- cas.addEventListener('mousedown', function () {
- isDraw = true
- ctx.beginPath()
- })
- // 鼠标移动事件
- cas.addEventListener('mousemove', function (e) {
- if (!isDraw) {
- // 没有按下
- return
- }
- // 获取相对于容器内的坐标
- var x = e.offsetX
- var y = e.offsetY
- ctx.lineTo(x, y)
- ctx.stroke()
- })
- cas.addEventListener('mouseup', function () {
- // 关闭开关了!
- isDraw = false
- })
复制代码 手动涂擦原理和画布相似,只不过用的是clearRect()方法。 - var cas = document.querySelector('canvas')
- var ctx = cas.getContext('2d')
- ctx.fillRect(0, 0, 600, 600)
- // 开关
- var isClear = false
- cas.addEventListener('mousedown', function () {
- isClear = true
- })
- cas.addEventListener('mousemove', function (e) {
- if (!isClear) {
- return
- }
- var x = e.offsetX
- var y = e.offsetY
- var w = 20
- var h = 20
- ctx.clearRect(x, y, w, h)
- })
- cas.addEventListener('mouseup', function () {
- isClear = false
- })
复制代码 刮刮乐- 首先需要设置奖品和画布,将画布置于图片上方盖住,
- 随机设置生成奖品。
- 当手触摸移动的时候,可以擦除部分画布,露出奖品区。
- img {
- width: 600px;
- height: 600px;
- position: absolute;
- top: 10%;
- left: 30%;
- }
- canvas {
- width: 600px;
- height: 600px;
- position: absolute;
- top: 10%;
- left: 30%;
- border: 1px solid #000;
- }
复制代码js - var cas = document.querySelector('canvas')
- var ctx = cas.getContext('2d')
- var img = document.querySelector('img')
- // 加一个遮罩层
- ctx.fillStyle = '#ccc'
- ctx.fillRect(0, 0, cas.width, cas.height)
- setImgUrl()
- // 开关
- var isClear = false
- cas.addEventListener('mousedown', function () {
- isClear = true
- })
- cas.addEventListener('mousemove', function (e) {
- if (!isClear) {
- return
- }
- var x = e.offsetX
- var y = e.offsetY
- ctx.clearRect(x, y, 30, 30)
- })
- cas.addEventListener('mouseup', function () {
- isClear = false
- })
- function setImgUrl() {
- var arr = ['./images/1.jpg', './images/2.jpg', './images/3.jpg', './images/4.jpg']
- // 0-3
- var random = Math.round(Math.random() * 3)
- img.src = arr[random]
- }
复制代码
|