您现在的位置是:网站首页> 编程资料编程资料
详解HTML5 canvas绘图基本使用方法html5使用Canvas绘图的使用方法详解html5 canvas常用api总结(二)--绘图API 用html5的canvas和JavaScript创建一个绘图程序的简单实例html5-Canvas可以在web中绘制各种图形
                    
                
                2023-10-16
                251人已围观
            
简介 这篇文章主要介绍了详解HTML5 canvas绘图基本使用方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
是HTML5中新增的标签,用于绘制图形,实际上,这个标签和其他的标签一样,其特殊之处在于该标签可以获取一个CanvasRenderingContext2D对象,我们可以通过JavaScript脚本来控制该对象进行绘图。
只是一个绘制图形的容器,除了id、class、style等属性外,还有height和width属性。在元素上绘图主要有三步:
- 获取
元素对应的DOM对象,这是一个Canvas对象; - 调用Canvas对象的getContext()方法,得到一个CanvasRenderingContext2D对象;
 - 调用CanvasRenderingContext2D对象进行绘图。
 
绘制线段moveTo()和lineTo()
以下是一个简单的绘图示例:
canvas绘图演示 

如果没有通过moveTo()特别指定,lineTo()的起始点是以上一个点为准。因此,如果需要重新选择起始点,则需要通过moveTo()方法。如果需要对不同的线段设置样式,则需要通过context.beginPath()重新开启一条路径,下面是一个示例:

绘制矩形rect()、fillRect()和strokeRect()
- context.rect( x , y , width , height ):只定义矩形的路径;
 - context.fillRect( x , y , width , height ):直接绘制出填充的矩形;
 - context.strokeRect( x , y , width , height ):直接绘制出矩形边框;
 

这里需要说明两点:第一点就是stroke()和fill()绘制的前后顺序,如果fill()后面绘制,那么当stroke边框较大时,会明显的把stroke()绘制出的边框遮住一半;第二点:设置fillStyle或strokeStyle属性时,可以通过“rgba(255,0,0,0.2)”的设置方式来设置,这个设置的最后一个参数是透明度。
另外还有一个跟矩形绘制有关的:清除矩形区域:context.clearRect(x,y,width,height)。
接收参数分别为:清除矩形的起始位置以及矩形的宽和长。
在上面的代码中绘制图形的最后加上:
context.clearRect(100,60,600,100);
可以得到以下效果:

绘制五角星
通过对五角星分析,我们可以确定各个顶点坐标的规律,这里需要注意的一点是:在canvas中,Y轴的方向是向下的。

相应代码如下:
 var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); context.beginPath(); //设置是个顶点的坐标,根据顶点制定路径 for (var i = 0; i < 5; i++) { context.lineTo(Math.cos((18+i*72)/180*Math.PI)*200+200, -Math.sin((18+i*72)/180*Math.PI)*200+200); context.lineTo(Math.cos((54+i*72)/180*Math.PI)*80+200, -Math.sin((54+i*72)/180*Math.PI)*80+200); } context.closePath(); //设置边框样式以及填充颜色 context.lineWidth="3"; context.fillStyle = "#F6F152"; context.strokeStyle = "#F5270B"; context.fill(); context.stroke();最后效果:

线条属性
除了上面用到的lineWidth属性,线条还有以下几个属性:
lineCap 属性设置或返回线条末端线帽的样式,可以取以下几个值:
- “butt” 向线条的每个末端添加平直的边缘(默认);
 - “round” 向线条的每个末端添加圆形线帽;
 - “square” 向线条的每个末端添加正方形线帽。
 
lineJoin 属性当两条线交汇时设置或返回所创建边角的类型,可以取以下几个值:
- “miter” 创建尖角(默认);
 - “bevel” 创建斜角;
 - “round” 创建圆角。
 
miterLimit 属性设置或返回最大斜接长度(默认为10)。斜接长度指的是在两条线交汇处内角和外角之间的距离。只有当 lineJoin 属性为 “miter” 时,miterLimit 才有效。
 var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); //测试lineCap属性 //设置基准线便于观察 context.moveTo(10,10); context.lineTo(10,200); context.moveTo(200,10); context.lineTo(200,200); context.lineWidth="1"; context.stroke(); //butt context.beginPath(); context.moveTo(10,50); context.lineTo(200,50); context.lineCap="butt"; context.lineWidth="10"; context.stroke(); //round context.beginPath(); context.moveTo(10,100); context.lineTo(200,100); context.lineCap="round"; context.lineWidth="10"; context.stroke(); //square context.beginPath(); context.moveTo(10,150); context.lineTo(200,150); context.lineCap="square"; context.lineWidth="10"; context.stroke(); //测试linJoin属性 //miter context.beginPath(); context.moveTo(300,50); context.lineTo(450,100); context.lineTo(300,150); context.lineJoin="miter"; context.lineWidth="10"; context.stroke(); //round context.beginPath(); context.moveTo(400,50); context.lineTo(550,100); context.lineTo(400,150); context.lineJoin="round"; context.lineWidth="10"; context.stroke(); //square context.beginPath(); context.moveTo(500,50); context.lineTo(650,100); context.lineTo(500,150); context.lineJoin="bevel"; context.lineWidth="10"; context.stroke(); //测试miterLimit属性 context.beginPath(); context.moveTo(700,50); context.lineTo(850,100); context.lineTo(700,150); context.lineJoin="miter"; context.miterLimit="2"; context.lineWidth="10"; context.strokeStyle="#2913EC"; context.stroke();各属性的不同取值的效果如下:

填充样式
前面用到的fillStyle和strokeStyle除了设置颜色外,还能设置其他填充样式,这里以fillStyle为例:
线性渐变
使用步骤
(1)var grd = context.createLinearGradient( xstart , ystart, xend , yend )创建一个线性渐变,设置起始坐标和终点坐标; 
 (2)grd.addColorStop( stop , color )为线性渐变添加颜色,stop为0~1的值; 
 (3)context.fillStyle=grd将赋值给context。
径向渐变 
该方法与线性渐变使用方法类似,只是第一步接收的参数不一样
var grd = context.createRadialGradient(x0 , y0, r0 , x1 , y1 , r1 );接收起始圆心的坐标和圆半径以及终点圆心的坐标和圆的半径。
位图填充
createPattern( img , repeat-style )使用图片填充,repeat-style可以取repeat、repeat-x、repeat-y、no-repeat。
 var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); //线性渐变 var grd = context.createLinearGradient( 10 , 10, 100 , 350 ); grd.addColorStop(0,"#1EF9F7"); grd.addColorStop(0.25,"#FC0F31"); grd.addColorStop(0.5,"#ECF811"); grd.addColorStop(0.75,"#2F0AF1"); grd.addColorStop(1,"#160303"); context.fillStyle = grd; context.fillRect(10,10,100,350); //径向渐变 var grd = context.createRadialGradient(325 , 200, 0 , 325 , 200 , 200 ); grd.addColorStop(0,"#1EF9F7"); grd.addColorStop(0.25,"#FC0F31"); grd.addColorStop(0.5,"#ECF811"); grd.addColorStop(0.75,"#2F0AF1"); grd.addColorStop(1,"#160303"); context.fillStyle = grd; context.fillRect(150,10,350,350); //位图填充 var bgimg = new Image(); bgimg.src = "background.jpg"; bgimg.onload=function(){ var pattern = context.createPattern(bgimg, "repeat"); context.fillStyle = pattern; context.strokeStyle="#F20B0B"; context.fillRect(600, 100, 200,200); context.strokeRect(600, 100, 200,200); };效果如下:

图形变换
平移:context.translate(x,y),接收参数分别为原点在x轴方向平移x,在y轴方向平移y。
缩放:context.scale(x,y),接收参数分别为x坐标轴按x比例缩放,y坐标轴按y比例缩放。
旋转:context.rotate(angle),接收参数是坐标轴旋转的角度。
需要说明的是,对图形进行变化后,接下来的一次绘图是紧接着上一次的状态的,所以如果需要回到初始状态,要用到context.save();和context.restore();来保存和恢复当前状态:
 var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); //translate() context.save(); context.fillStyle = "#1424DE"; context.translate(10,10); context.fillRect(0,0,200,200); context.restore(); //scale() context.save(); context.fillStyle = "#F5270B"; context.scale(0.5,0.5); context.fillRect(500,50,200,200); context.restore(); //rotate() context.save(); context.fillStyle = "#18EB0F"; context.rotate(Math.PI / 4); context.fillRect(300,10,200,200); context.restore();效果如下:

另外一个跟图形变换相关的是:矩阵变换 :context.transform(a, b, c, d, e, f, g)。参数的含义如下: 
 a 水平缩放 ( 默认为1 ) 
 b 水平倾斜 ( 默认为 0 ) 
 c 垂直倾斜 ( 默认为 0 ) 
 d 垂直缩放 ( 默认为1 ) 
 e 水平位移 ( 默认为 0 ) 
 f 垂直位移 ( 默认为 0 ) 
 读者可以自行验证其各个参数的效果,这里就不一一介绍了。
绘制曲线
跟绘制曲线的有四个函数,分别是:
context.arc(x,y,r,sAngle,eAngle,counterclockwise);用于创建弧/曲线(用于创建圆或部分圆)。接收的参数含义: 
 | 参数 | 含义 | 
 | :————- |:————-| 
 | x | 圆的中心的 x 坐标 | 
 |y|圆的中心的 y 坐标| 
 |r|圆的半径| 
 |sAngle|起始角,以弧度计(弧的圆形的三点钟位置
                
相关内容
- 全民英雄复仇之魂出装攻略心得_敏捷英雄复仇之魂怎么出装_手机游戏_游戏攻略_
 - 全民英雄智力英雄小歪进化攻略心得_智力英雄小歪怎么进化_手机游戏_游戏攻略_
 - 全民英雄力量英雄凤凰全面解析_力量英雄凤凰好不好用_手机游戏_游戏攻略_
 - 全民英雄元旦新版玩法说明_全民英雄英雄碎片玩法攻略_手机游戏_游戏攻略_
 - 全民英雄辅助控场英雄推荐_哪些辅助控场英雄好用_手机游戏_游戏攻略_
 - 找死!100种蠢蠢的死法 第93关 图文攻略_手机游戏_游戏攻略_
 - 狂野飙车8 震撼登陆iOS_手机游戏_游戏攻略_
 - 找死!100种蠢蠢的死法 第94关 图文攻略_手机游戏_游戏攻略_
 - 找死!100种蠢蠢的死法 第95关 图文攻略_手机游戏_游戏攻略_
 - 天天飞车顶级豪车实战视频_狂飚270W高分攻略_手机游戏_游戏攻略_
 
                                
                                                        
                                
                                                        
                                
                                                        
    