最近在学canvas元素,<canvas>标签只是图形容器,必须使用js来绘制图形。为了增强对canvas元素的理解,于是用canvas画了一个哆啦A梦来
要实现的效果图
哆啦A梦
要想绘画出这个哆啦a梦首先要掌握以下一些函数:
开始绘画!!
首先我们需要创建一个400*600的画布,代码如下:
=>接着定义一个div,用来显示坐标
=>接着我写了一个显示坐标的函数,可以用来看大概画到哪个点:
function zuobiao(event) { var x = event.clientX; var y = event.clientY; var out = document.getElementById("put"); out.innerHTML = "x:" + x + " y:" + y; }然后getContext() 方法返回一个用于在画布上绘图的环境。
var cxt = document.getElementById('doraemon').getContext('2d');接着开始画头部:
cxt.beginPath();//起始路径 cxt.lineWidth = 1;//线宽度为1 cxt.strokeStyle = '#000';//笔触的颜色 cxt.arc(200, 175, 175, 0.7 * Math.PI, 0.3 * Math.PI);//绘制弧,中心点(200,175),半径175 cxt.fillStyle = '#0bb0da';//设置填充时的颜色 cxt.fill();//填充颜色 cxt.stroke();//绘制路径头部如下:
头部
接着绘画出脸部:
cxt.beginPath(); cxt.fillStyle = '#fff'; cxt.moveTo(110, 110);//将路径移到点(110,110),不创建线条 cxt.quadraticCurveTo(-10, 200, 120, 315);//创建二次贝塞尔曲线,控制点(-10,200),结束点(120,315) cxt.lineTo(280, 315);//添加一个新点,然后在画布中创建从(110,110)到(280,315)的线条 cxt.quadraticCurveTo(410, 210, 290, 110); cxt.lineTo(110, 110); cxt.fill(); cxt.stroke();脸部如下:
脸部
接着绘画眼睛:
cxt.beginPath(); cxt.lineWidth = 1; cxt.fillStyle = '#fff'; cxt.moveTo(110, 110); cxt.bezierCurveTo(110, 25, 200, 25, 200, 100);//创建三次贝塞尔曲线,控制点1(110,25),控制点2(200,25),结束点(200,100),也就是画左上半椭圆 cxt.bezierCurveTo(200, 175, 110, 175, 110, 100);//画左下半椭圆 cxt.moveTo(200, 100); cxt.bezierCurveTo(200, 25, 290, 25, 290, 100); cxt.bezierCurveTo(290, 175, 200, 175, 200, 100); cxt.fill(); cxt.stroke();
眼睛
接着画左右眼球:
/*右眼球*/ cxt.beginPath(); cxt.fillStyle = '#000'; cxt.arc(230, 130, 12, 0, 2 * Math.PI); cxt.fill(); cxt.stroke(); /*左眼球*/ cxt.beginPath(); cxt.fillStyle = '#000'; cxt.arc(170, 130, 12, 0, 2 * Math.PI); cxt.fill(); cxt.stroke();左右眼球:
左右眼球
接着画鼻子:
cxt.beginPath(); cxt.arc(200, 165, 25, 0, 2 * Math.PI); cxt.fillStyle = '#d05823'; cxt.fill(); cxt.stroke();鼻子:
鼻子
接着画胡须:
(); cxt.moveTo(80, 175); cxt.lineTo(150, 195); cxt.moveTo(80, 200); cxt.lineTo(150, 205); cxt.moveTo(80, 225); cxt.lineTo(150, 215); (200, 195); cxt.lineTo(200, 290); (250, 195); cxt.lineTo(320, 175); cxt.moveTo(250, 205); cxt.lineTo(320, 200); cxt.moveTo(250, 215); cxt.lineTo(320, 225); cxt.stroke();胡须:
胡须