arcTo用法
用法:arcTo(x1, y1, x2, y2, radius)
说明:arcTo()方法将利用当前端点、端点1(x1,y1)和端点2(x2,y2)这三个点所形成的夹角,然后绘制一段与夹角的两边相切并且半径为radius的圆上的弧线。弧线的起点就是当前端点所在边与圆的切点,弧线的终点就是端点2(x2,y2)所在边与圆的切点,并且绘制的弧线是两个切点之间长度最短的那个圆弧。此外,如果当前端点不是弧线起点,arcTo()方法还将添加一条当前端点到弧线起点的直线线段。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>arcTo()绘制</title> </head> <body> <canvas id="drawing" width="400" height="300" style="border:#0F0 solid 1px">A Drawing of something</canvas> <script> var drawing=document.getElementById("drawing"); //确定浏览器支持<canvas>元素 if(drawing.getContext){ //取得绘图上下文对象的引用,“2d”是取得2D上下文对象 var context=drawing.getContext("2d"); //设置canvas的onmouse事件 //路径指定 context.beginPath(); //单独使用arcTo()方法必须指定绘图开始的基点 context.moveTo(20,20); //创建两切线之间的弧/曲线 context.arcTo(200,150,20,280,50); //起始端点(20,20)、端点1(290,150)、端点2(20,280)三点组成的夹角相切并且半径为50的圆弧,并且只保留两切点之间圆弧部分以及起始端点到第一个切点之间部分 context.lineTo(200,280); //绘图 context.strokeStyle="red"; //指定路径线的粗细 context.lineWidth=3; //绘制路径 context.stroke(); //绘制文字标注 context.fillText("当前端点(20,20)", 20,20); context.fillText("端点1(200,150)", 200,150); context.fillText("端点2(20,280)", 20,280); context.fillText("直线结束点(200,280)", 200,280); //绘制辅助线 context.lineWidth = 1; context.strokeStyle="blue"; context.moveTo(20,20); context.lineTo(200,150); context.lineTo(20,280); context.stroke(); } </script> </body> </html>
如上图,当前端点(20,20)、端点1(200,150),端点2(20,280)三点组成夹角绘制弧线,弧线半径为50并与夹角相切。当前端点不是弧线起点,arcTo()方法还将添加一条当前端点到弧线起点的直线线段。
最后一段直线则是context.lineTo(200,280);绘制出来的,与arcTo绘制的弧线没有关系。
stroke()和fill()用法
stroke():绘制已定义的路径
fill():填充当前绘图路径
下面的代码中我用了两个画布,画图方法分别为drawCanvas1和drawCanvas2,以方便比较两者的区别。
<!Doctype html> <html> <head> <title>stroke()、fill()用法</title> <meta charset="utf-8"/> <style> .myCanvas{ border:2px solid #f00; } </style> <script> window.onload = function(){ drawConvas1(); drawConvas2(); }; function drawConvas1(){ var canvas = document.getElementById("myCanvas1"); var context = canvas.getContext("2d"); //1、绘制三解形路径 context.beginPath(); context.moveTo(20,20); context.lineTo(20,100); context.lineTo(100,100); context.lineTo(20,20); context.strokeStyle = "red"; context.stroke(); //2、绘制矩形80*80 context.beginPath(); context.moveTo(20,200); context.lineTo(100,200); context.lineTo(100,280); context.lineTo(20,280); context.lineTo(20,200); context.stroke(); //绘制坐标点标注,以方便看其原理 context.fillText("(20,20)",20,20); context.fillText("(20,100)",20,100); context.fillText("(100,100)",100,100); context.fillText("(20,200)",20,200); context.fillText("(100,200)",100,200); context.fillText("(100,280)",100,280); context.fillText("(20,280)",20,280); } function drawConvas2(){ var canvas = document.getElementById("myCanvas2"); var context = canvas.getContext("2d"); //1、绘制三解形填充 context.beginPath(); context.moveTo(20,20); context.lineTo(20,100); context.lineTo(100,100); context.lineTo(20,20); context.fillStyle = "red"; context.fill(); //2、绘制填充矩形80*80,先绘制路径再用fill()方法填充 context.beginPath(); context.moveTo(20,200); context.lineTo(100,200); context.lineTo(100,280); context.lineTo(20,280); context.lineTo(20,200); context.fill(); //上面的代码相当于 //context.fillRect(20,200,80,80); //3、使用方法fillRect(x,y,width,height)绘制矩形填充 context.fillRect(120,200,80,80); }</script></head><body> <p> <canvas class="myCanvas" id="myCanvas1" width="400" height="400"> 您的浏览器不支持canvas </canvas> <canvas class="myCanvas" id="myCanvas2" width="400" height="400"> 您的浏览器不支持canvas </canvas> </p> </body> </html>
createPattern()用法
语法:createPattern(image, repetitionStyle)
说明:createPattern()方法用于创建一个表示将图像在当前图形上以什么样的方式进行重复平铺的CanvasPattern对象。参数image指定用于平铺的图像,该参数可以是一个Image对象,也可以是一个Canvas对象。参数repetitionStyle表示图像如何进行重复平铺,可能的值有repeat(在水平和垂直方向上均进行重复平铺,这也是默认值)、repeat-x(只在水平方向上重复平铺)、repeat-y(只在垂直方向上重复平铺)、no-repeat(只铺一次,不进行重复平铺)。
看下面的示例:
<!Doctype html> <html> <head> <title>createPattern()用法</title> <meta charset="utf-8"/> <style> .myCanvas{ border:2px solid #f00; } </style> <script> window.onload = function(){ drawConvas1(); drawConvas2(); }; function drawConvas1(){ var canvas = document.getElementById("myCanvas1"); var context = canvas.getContext("2d"); //1、创建一个图片对象 var img = new Image(); img.src = "html5.png"; ///当图片加载完毕后再设置对应的图像平铺模式并填充矩形 img.onload = function(){ var pattern = context.createPattern(img, "repeat"); context.fillStyle = pattern; context.fillRect(0,0,200,200); } } function drawConvas2(){ var canvas = document.getElementById("myCanvas2"); var context = canvas.getContext("2d"); //1、创建一个图片对象 var img = new Image(); img.src = "html5.png"; ///当图片加载完毕后再设置对应的图像平铺模式并填充矩形 img.onload = function(){ var pattern = context.createPattern(img, "repeat"); context.fillStyle = pattern; context.fillRect(30,30,200,200); } } </script> </head> <body> <div> <canvas class="myCanvas" id="myCanvas1" width="400" height="400"> 您的浏览器不支持canvas </canvas> <canvas class="myCanvas" id="myCanvas2" width="40