canvas元素
canvas是一套强大的图形API,有多种绘制路径,矩形、圆形、字符及添加图像的方法,可以处理从文字处理到电子游戏等各类程序。
基本属性
id、width、height
注意当浏览器不支持canvas元素时才会显示canvas元素内的内容
<canvas id="canvas1" width="500px" height="500px"> 定义了一块画布,不在浏览器中显示,可以在style中设置canvas来使画布显示, 你的浏览器不支持canvas元素(当浏览器不支持时会显示canvas元素中的内容) </canvas>
复制
关于画布坐标(y值越往下越大)
canvas绘制直线
步骤
- 宽、高、id
- 提示语句
- 设置script元素
- 获取画布,设置绘图环境
- 设定起点:moveTo(x坐标,y坐标)
- 设定终点:lineTo(x坐标,y坐标)【添加新点之后这个点将会变成中间点】
- 开始绘制:stroke()【绘制已定义的路径】
<canvas id="canvas" width="500px" height="500px"> <!-- 定义了一块画布,不在浏览器中显示,可以在style中设置canvas来使画布显示, 你的浏览器不支持canvas元素(当浏览器不支持时会显示canvas元素中的内容) --> </canvas> <script type="text/javascript"> //下面两句为固定语句,var后面为定义变量名称,可以为任何符合规则的名称 //定义变量获取画布 var canvas=document.getElementById('canvas') //设置绘图环境为2d(平面) var c=canvas.getContext('2d') c.moveTo(0,0) c.lineTo(200,200) c.stroke(); </script>
复制
(变量名称可以自定义)
添加样式
- strokeStyle颜色、渐变或者模式
- lineWidth线宽=数值
- c.lineWidth=10;
- fillStyle=颜色值;填充色
- c.strokeStyle=“颜色值(只适用轮廓,线段等)”
c.moveTo(0,0) c.lineTo(200,200) c.lineWidth=30 c.strokeStyle="green" c.stroke();
复制
矩形绘制
beginPath()用来创建新的路径
closePath()从当前点回到起始点的封闭路径
rect(x,y,w,h)创建矩形
strokeRect(x,y,w,h,x,y,w,h)无填充矩形
fillRect(x,y,w,h)被填充的矩形
stroke()绘制已有路径
c.beginPath(); //每次开始新的动作不受上面的变量的影响 c.lineWidth=10; c.strokeStyle="grey"; //边框颜色 c.rect(200,200,100,100); c.stroke(); c.beginPath(); c.lineWidth=10; c.fillStyle="blue"; //填充颜色 c.fillRect(350,200,100,100); c.stroke();
复制
圆弧绘制
arc() 圆弧/曲线/部分圆
arc(x,y,r,开始角度,结束角度,true/false)
(必须有stroke()和fill()才能完整显示)
属性
- x,y圆心坐标 ‘
- r半径数值
- 起始弧度和终止弧度
- 绘制方向(true逆时针,false顺时针)
关于角度
注意:与普通的坐标象限不相同。
c.beginPath(); c.lineWidth=10 c.strokeStyle="green" c.fillStyle="blue" c.arc(100,100,30,Math.PI*1/3,Math.PI,false) c.fill() //填充 c.stroke(); //描边
复制
c.closePath() //从终点到起点封闭起来
复制
画扇面
可以画两个扇形嵌套,其中小的扇形的底色和画布一样,这样就可以实现画扇面。
closePath()从尾部链接到首部
c.beginPath(); c.lineWidth=5 c.fillStyle="blue" c.moveTo(200,200) c.arc(200,200,150,Math.PI*1.1,Math.PI*1.9,false) c.closePath() c.fill() //填充 c.beginPath(); c.lineWidth=0; c.fillStyle="antiquewhite" c.moveTo(200,200) c.arc(200,200,60,Math.PI*1.1,Math.PI*1.9,false) c.fill() //填充
复制
绘制文字
- 描边空心文字:strokeText(“文字”,x,y,maxWidth)
- 实心文字:fillText(“文字”,x,y,maxWidth)
- 字体样式:font=“大小 字体”(注意无逗号)
给元素设置一样的坐标和文字,便可以得到带有描边的实心文字
c.beginPath() c.lineWidth=8 c.strokeStyle="pink" c.fillStyle="red" c.font="50px 隶书" c.strokeText("canvas元素111",100,100) c.fillText("canvas元素111",100,100) c.fill() c.stroke()
复制
渐变色
- createLinearGradient线性渐变
- createRadialGradient放射性渐变
属性
(x1,y1,x1,y2)渐变的起始坐标和终点坐标
addColorStop(位置,“颜色值”)0表示起点,1表示终点
线性渐变
c.beginPath() g=c.createLinearGradient(50,50,50,300) g.addColorStop(0,"green") g.addColorStop(0.8,"red") g.addColorStop(1,"pink") c.fillStyle=g; c.fillRect(50,50,300,300)//画一个矩形 c.stroke() c.fill()
复制
放射性渐变
(x1,y1,r1,x2,y2,r2)
c.beginPath() c.moveTo(400,300) g=c.createRadialGradient(400,300,10,400,300,200) g.addColorStop(0,"green") g.addColorStop(0.8,"red") g.addColorStop(1,"pink") c.fillStyle=g; c.arc(400,300,200,Math.PI*3/2,Math.PI*2,false)//画一个圆 c.closePath() //从终点链接到起点 c.fill()
复制