canvas 最早由Apple引入WebKit,用于Mac OS X 的 Dashboard,后来又在Safari和Google Chrome被实现。 基于 Gecko 1.8的浏览器,比如 Firefox 1.5, 同样支持这个元素。 canvas 元素是WhatWG Web applications 1.0规范的一部分,也包含于HTML 5中。
HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。 画布是一个矩形区域,您可以控制其每一像素。 canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
就是相当于在页面上放置一个canvas
元素,就相当于在页面上放置了一块画布,可以在其中进行图形的描绘。canvas
元素只是一块无色透明的区域,需要利用JS编写在其中进行绘画的脚本。
向 HTML5 页面添加 canvas 元素。 规定元素的 id、宽度和高度:
canvas标签默认是行元素(display:inline)
那为什么一个display:inline行元素他可以支持宽高呢 ??
因为canvas是一个替换元素他就可以支持宽高(什么是可替换元素)
在H5中canvas标签向JS提供了许多API接口,来让我们通过JS来绘制canvas标签中的一些画面等。。。
基础知识
var cxt = canvas.getContext('2d'); 获取2d画笔(最常用)
canvas.getContext('webgl'); 获取3d画笔但是兼容性不是很好(不常用)一般是做不出来的
首先我们要获取画布和画笔 然后就可以在canvas上面画任何的图形了
//获取画布
var canvas = document.getElementById('myCanvas');
//获取画笔
//画布.getContext('2d') 就可以获取到画笔了 当前这个画笔是2d画笔
var cxt = canvas.getContext('2d');//2d画笔最常用
我们们在绘制任何图形的时候一般用用两种方式来绘制图形
一种是stroke方式来绘制空心的图形,另一种是fill方式来绘制实心的图形
而我们绘制矩形的时候跟着两种方式有所不同(绘制矩形也可以用stroke和fill方式来绘制),也可以说canvas提供了更快捷的方式来绘制矩形
//获取画布
var canvas = document.getElementById('myCanvas');
//获取画笔
var cxt = canvas.getContext('2d');//2d画笔最常用
//首先你要定义绘制图形什么图形的轨迹
//在决定用stroke和fill方式来绘制图形
//定义绘制矩形的轨迹
cxt.rect(0,0,200,200);
//绘制矩形
cxt.stroke();
绘制任何图形都能用到的两种方式
cxt.stroke()绘制空心图形
cxt.fill()绘制实心图形
首先你要定义绘制图形的轨迹在来选择用stroke和fill方式来绘制图形
基础知识
绘制矩形有两种方式
第一种方式
先用rect方法定义一个矩形的轨迹,在用stroke或者是fill方法绘制圆形
cxt.stroke()绘制空心矩形
cxt.fill()绘制实心矩形
//获取画布
var canvas = document.getElementById('myCanvas');
//获取画笔
var cxt = canvas.getContext('2d');//2d画笔最常用
//定义绘制矩形的轨迹
cxt.rect(0,0,200,200);
//绘制矩形
//cxt.stroke();//绘制空心矩形
cxt.fill();//绘制实心矩形
绘制矩形的轨迹:rect接收的参数
cxt.rect(10,20,100,150);
//cxt.rect(距离画布左上角的距离,距离画布右上角的距离,绘制图形的宽度,绘制图形的高度)
点前cxt.rect表示你要在距离画布水平方向10像素竖直方向20像素这个点开始绘制矩形,绘制长方形的大小是宽度为100高度为150的一个矩形
cxt.rect(10,20,100,150)这个函数是用来绘制一个在x,y这个点开始绘制指定宽度和高度的矩形(绘制一个轨迹)
第二种方式
canvas提供了两种方式直接绘制矩形不用先用rect绘制轨迹在用stroke和fill绘制矩形了
cxt.fillRect(x,y,w,h); 绘制实心的矩形
cxt.strokeRect(x,y,w,h); 绘制空心的矩形
绘制一个实心的矩形
//获取画布
var canvas = document.getElementById('myCanvas');
//获取画笔
var cxt = canvas.getContext('2d');//2d画笔最常用
//绘制实心的矩形
cxt.fillRect(10,20,100,150);
file表示(填充) Rect表示(矩形) 通过画笔用fillRect绘制一个充满的实心的矩形
绘制实心矩形:fillRect接收的参数
//绘制实心矩形
cxt.fillRect(10,20,100,150);
// cxt.fillRect(距离画笔左上角的距离,距离画布右上角的距离,绘制图形的宽度,绘制图形的高度)
绘制一个空心的矩形
//获取画布
var canvas = document.getElementById('myCanvas');
//获取画笔
var cxt = canvas.getContext('2d');//2d画笔最常用
//绘制空心矩形
cxt.strokeRect(10,20,100,150);
表示stroke(空心) Rect(矩形)通过画笔用strokeRect绘制一个空心的矩形
绘制空心矩形:strokeRect接收的参数
//绘制空心矩形
cxt.strokeRect(10,20,100,150);
// cxt.strokeRect(距离画笔左上角的距离,距离画布右上角的距离,绘制图形的宽度,绘制图形的高度)
基础知识
在数学中一π等于180度,两π等于360度,也就是一个圆周,而在js中数学对象中的Math.PI来表示π
cxt.arc(x,y,r,圆的起始角度,圆的终止角度,true) false 为默认值表示顺时针绘制圆,true表示逆时针绘制圆绘制圆形轨迹
通过cxt.arc方法来绘制圆的轨迹然后在通过stroke或者是fill来绘制是空心的还是实心的圆
arc绘制圆形的轨迹接收的参数:cxt.arc(圆心距离画布的水平距离,圆心距离画布的竖直距离,表示圆的半径,绘制圆的起点,绘制圆的终点,表示顺时针绘制还是逆时针绘制)默认值是false false表示顺时针绘制圆 true表示逆时针绘制圆
绘制实心的圆形
//获取画布
var canvas = document.getElementById('myCanvas');
//获取画笔
var cxt = canvas.getContext('2d');//2d画笔最常用
//绘制圆的轨迹
cxt.arc(200,200,200,0,Math.PI*2,false);
//绘制实心的圆
cxt.fill();
//第一个参数和第二个参数表示圆的圆心
//cxt.arc(圆心距离画布的水平距离, 圆心距离画布的竖直距离, 表示圆的半径, 绘制圆的起点, 绘制圆的终点, 表示顺时针绘制还是逆时针绘制)
//默认值是false false表示顺时针绘制圆 true表示逆时针绘制圆
//Math.PI(π) = 180°
绘制空心的圆形
//获取画布
var canvas = document.getElementById('myCanvas');
//获取画笔
var cxt = canvas.getContext('2d');//2d画笔最常用
//绘制圆的轨迹
//从250,250位置开始绘制圆 圆的半径是250 在从180度多开始逆时针绘制到360度
cxt.arc(250,250,250,Math.PI,Math.PI*2,true);
//绘制空心的圆
cxt.stroke();
前言
在实际生活当中是两点确定一条直线的,那么在canvas中可以用moveTo来表示绘制线段的起点,用lineTo来表示绘制线段的终点这样就可以确定一条直线了,在选择stroke或者是fill方式绘制线段,其实每次绘制图形的时候都是一个路径其实可以用beginPath来开始绘制路径在用closePath闭合当前路径,这两种方法在画图形的时候必须要写上不然会让路径连上效果不好。
基础知识
cxt.lineWidth = 数值 设置画笔的线宽
cxt.strokeStyle = '颜色值' 设置实心画笔的颜色
cxt.fillStyle = '颜色值' 设置空心画笔的颜色
开始绘制路径和闭合当前的路径
cxt.closePath() 闭合当前的路径 ( 这两个函数是配套的)
设置两条线段连接处的样式
设置一条线段两端的样式
square往线的两端追加长度(长度是你当前线宽的一半) 上面添加5 和 下面添加5 = 当前线宽10
绘制一条线段
//获取画布
var canvas = document.getElementById('myCanvas');
//获取画笔
var cxt = canvas.getContext('2d');
//绘制开始线段路径 让画笔移动到某个点上(初始点)
cxt.moveTo(20,20);
//绘制结束线段路径 在让画笔移动到终点上面(最终点)
cxt.lineTo(200,200);
//绘制线段
cxt.stroke();
绘制线段:定义线段的轨迹(先有一个初始点在有一个终点,然后就可以得出两个点了(两点之间确定一条直线)
绘制线段的路径:移动画笔到 20 20这个点用cxt.moveTo(20,20) , 再次移动到 200 200 这个点cxt.lineTo(200,200) , 然后这个两个点已经是一条线段了
绘制线段:cxt.stroke()绘制空心线段 注意一般在绘制线段的时候都用stroke方式绘制线段,不会使用fill方式绘制线段的
设置画笔的样式
我们在用canvas画东西的时候 分为两种绘制的方法(方法和设置画笔的属性都要对应上)
第一种:画笔.stroke绘制实心的东西
第二种:画笔.fill绘制空心的东西
设置画笔的颜色和设置画笔的宽度都是根据 画笔的种类来进行设置的{ 1.stroke实心 2.fill空心}
设置画笔的线宽
画是画笔画出来的,让画笔的线宽变粗 自然就可以让线条变粗了
var canvas = document.getElementById('myCanvas');
var cxt = canvas.getContext('2d');
//画笔.lineWidth设置画笔的画笔的线条宽度 line(线)
//设置画笔的线宽
cxt.lineWidth = 10;
//绘制开始线段路径
cxt.moveTo(20,20);
//绘制结束线段路径
cxt.lineTo(200,200);
cxt.stroke();
设置画笔的颜色绘制线段
var canvas = document.getElementById('myCanvas');
var cxt = canvas.getContext('2d');
//设置画笔的线宽
cxt.lineWidth = 10;
//画笔.strokeStyle设置画笔的颜色
//stroke表示空心 设置空心画笔的颜色 fill表实心 设置实心画笔的颜色
cxt.strokeStyle = 'pink'; //设置空心画笔的颜色
// cxt.fillStyle = 'pink' //设置实心画笔的样式
cxt.moveTo(20,20);
cxt.lineTo(200,200);
cxt.stroke();
一般绘制线条都是默认(stroke)空心的,实心线条不会显示出来没有人这样用
用线条绘制一个图形
var canvas = document.getElementById('myCanvas');
var cxt = canvas.getContext('2d');
cxt.strokeStyle = 'pink';
cxt.lineWidth = 10;
//设置两条线段连接处的样式
cxt.lineJoin = 'round';
cxt.beginPath();//表示开始断开路径
cxt.moveTo(20,20);
cxt.lineTo(20,100);
cxt.lineTo(50,80);
cxt.closePath()//闭合当前路径
cxt.stroke();
用cxt.lineJoin = 'round'设置线条的两端样式为圆角,也可以连续用lineTo方法绘制多个线段,在绘制路径之前最好调用beginPath函数断开之前路径 ,cxt.closePath(); 自动把当前这个点把路径给关闭了(闭合当前路径) 这个函数有闭合路径的作用
绘制一个圆
圆也是一个路径 也绘制一个新的路径时调用beginPath来闭合上一次路径
var canvas = document.getElementById('myCanvas');
var cxt = canvas.getContext('2d');
cxt.strokeStyle = 'pink';
cxt.lineWidth = 10;
cxt.beginPath();//绘制一个新的路径时必须调用beginPath函数
//表示开始绘制圆的路径
cxt.arc(150,150,100,0,Math.PI);
cxt.closePath() //闭合当前的路径(圆也是路径也需要闭合)
cxt.stroke();
前言
在canvas标签内不可以在内部写其他的标签和文字
那我们想让canvas标签内部有文字那该怎么办??
canvas通过们提供了一个cxt.font这个属性内部可以写字体大小和字体的系列,然后在通过cxt.fillText()或者是cxt.strokeText()选择是绘制空心文字还是实心文字。
基础知识
cxt.fillText(文字,绘制文字的x位置,绘制文字的y位置)绘制实心文字
cxt.strokeText(文字,绘制文字的x位置,绘制文字的y位置)绘制空心文字 (不常用)
设置文字和绘制文字的x水平位置的对齐方式
cxt.textAlign = 'left'; 左对齐 默认
cxt.textAlign = 'right'; 右对齐
设置文字和绘制文字的y位置的对齐方式
cxt.textBaseline = 'middle' 文字的最中间和绘制文字的y位置对齐(常用)
cxt.textBaseline = 'top' 文字的最顶间和绘制文字的y位置对齐
cxt.textBaseline = 'hanging' 文字的最顶间和绘制文字的y位置对齐(和top效果差不多)
文字的阴影
cxt.shadowOffsetY = 数值 设置文字阴影的竖直偏移量
cxt.shadowColor = '颜色名/rgb/rgba/十六进制' 设置文字阴影的颜色
cxt.shadowBlur = 数值0-1; 设置文字阴影的模糊程度
cxt.measureText(文本) 测量文本的宽度(不常用)
绘制文字带有阴影
var canvas = document.getElementById('myCanvas');
var cxt = canvas.getContext('2d');
//绘制文字的轨迹
cxt.font = '20px 微软雅黑';
//设置文字的x轴水平对齐方式
cxt.textAlign = 'center';
//设置文字的y轴位置对齐方式
cxt.textBaseline = 'middle';
//设置文字的阴影样式
cxt.shadowColor = 'red';
//设置文字阴影的水平偏移量
cxt.shadowOffsetX = 10
//设置文字阴影的竖直偏移量
cxt.shadowOffsetY = 10
//设置文字阴影的模糊程度
cxt.shadowBlur = 0.5;
//绘制文字
cxt.fillText('花生', 250, 30);
前言
两点之间确定一条直线,但是这个直线不一定是直线也有可能是曲线。
基础知识
绘制二次贝塞尔曲线
cxt.quadraticCurveTo(控制点的x,控制点的y,曲线终点的x,曲线终点的y)
绘制三次贝塞尔曲线
绘制二次贝塞尔曲线
绘制二次贝塞尔曲线(只有一个控制点叫做二次贝塞尔曲线)
绘制二次贝塞尔曲线你要有 moveTo()绘制曲线起点 cxt.quadraticCurveTo(控制点,终点)绘制曲线的终点 这些条件才能绘制曲线
var canvas = document.getElementById('myCanvas');
var cxt = canvas.getContext('2d');
cxt.beginPath();
//绘制曲线的起点
cxt.moveTo(20, 20);
//绘制曲线的终点
cxt.quadraticCurveTo(40, 40, 100, 200);
cxt.stroke();
绘制三次贝塞尔曲线
绘制三次贝塞尔曲线(有两个控制点叫做三次贝塞尔曲线)
绘制三次贝塞尔曲线 moveTo()绘制曲线起点 cxt.quadraticCurveTo(控制点1,控制点2,终点)绘制曲线终点 这些条件才能绘制曲线
var canvas = document.getElementById('myCanvas');
var cxt = canvas.getContext('2d');
cxt.beginPath();
//绘制曲线的起点
cxt.moveTo(20, 20);
//获取曲线的终点
cxt.quadraticCurveTo(100, 20, 300, 200, 400, 400);
cxt.stroke();