html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
- 格式:doc
- 大小:22.00 KB
- 文档页数:3
使⽤HTML5Canvas绘制直线或折线等线条的⽅法讲解HTML5 Canvas基本概念讲解html5,这个应该就不需要多作介绍了,只要是开发⼈员应该都不会陌⽣。
html5是「新兴」的⽹页技术标准,⽬前,除IE8及其以下版本的IE浏览器之外,⼏乎所有主流浏览器(FireFox、Chrome、Opera、Safari、IE9+)都已经开始⽀持html5了。
除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的⽀持能⼒以及性能表现」的军备竞赛。
html作为⾰命性的⽹页技术标准,再加上众多浏览器⼚商或组织的⿍⼒⽀持,可以想见,html5将会成为未来⽹页技术的领头⽺。
html5,说其是「新兴」的,其实也不算新了。
毕竟,html5早在2008年其第⼀份正式草案就已经对外公布。
从2008年算起,到现在也算是有些年头了。
不过,到⽬前为⽌,对于⼤多数开发⼈员⽽⾔,仍然是「雷声⼤,⾬点⼩」——听说html5的多,实际使⽤html5的却很少。
众所周知,html5中增加了许多新特性。
在html5的众多特性中,Canvas应该算是最引⼈注⽬的新特性之⼀。
我们使⽤html5的Canvas对象可以直接在浏览器的⽹页上绘制图形。
这意味着浏览器可以脱离Flash等第三⽅插件,直接在⽹页上显⽰图形或动画。
现在,我们就来为html5初学者介绍如何使⽤html5 Canvas绘制基本的图形。
⾸先,我们需要准备如下html基础代码:XML/HTML Code复制内容到剪贴板1. <!DOCTYPE html>2. <html>3. <head>4. <meta charset="UTF-8">5. <title>HTML5 Canvas⼊门⽰例</title>6. </head>7. <body>8.9. </body>10. </html>上述代码是⼀个html5页⾯的基本代码模板。
canvas三次贝塞尔曲线绘制工具方法Canvas是HTML5提供的绘图API,它可以使用JavaScript来绘制图形、渲染图像以及创建动画效果。
Canvas中可以使用贝塞尔曲线(Bezier Curve)来绘制平滑的曲线。
贝塞尔曲线有三次贝塞尔曲线(Cubic Bezier Curve)和二次贝塞尔曲线(Quadratic Bezier Curve)两种形式,而本文将重点介绍三次贝塞尔曲线的绘制工具方法。
在Canvas中绘制三次贝塞尔曲线需要使用到以下几个重要的属性和方法:1. `beginPath()`:开始一个新的路径。
2. `moveTo(x, y)`:把路径移动到画布中的指定点(x, y),不创建线条。
3. `bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)`:创建三次贝塞尔曲线。
其中,`cp1x`和`cp1y`是控制点1的坐标,`cp2x`和`cp2y`是控制点2的坐标,`x`和`y`是结束点的坐标。
4. `stroke()`:绘制路径的边框。
5. `fill()`:填充路径的内容。
接下来,我们将通过一个实际的例子来演示如何使用Canvas绘制三次贝塞尔曲线。
假设我们要绘制一个圆形的脸部,可以使用三次贝塞尔曲线来绘制圆形的轮廓。
具体步骤如下:1.首先,在Canvas上创建一个圆形脸部的轮廓:```javascriptconst canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');ctx.beginPath();ctx.arc(200, 200, 150, 0, 2 * Math.PI); //使用arc方法绘制圆形轮廓ctx.stroke(); //绘制轮廓的边框```2.接下来,在圆形脸部的基础上,通过三次贝塞尔曲线绘制眼睛的轮廓:```javascriptctx.beginPath();ctx.moveTo(120, 160); //移动到左眼位置ctx.bezierCurveTo(120, 100, 280, 100, 280, 160); //使用bezierCurveTo方法绘制眼睛ctx.stroke();```3.紧接着,通过三次贝塞尔曲线绘制嘴巴的轮廓:```javascriptctx.beginPath();ctx.moveTo(150, 240); //移动到嘴巴的起始位置ctx.bezierCurveTo(170, 320, 230, 320, 250, 240); //使用bezierCurveTo方法绘制嘴巴ctx.stroke();```通过以上三步的操作,我们就成功绘制了一个使用三次贝塞尔曲线绘制的圆形脸部,其中包含眼睛和嘴巴的轮廓。
HTML5Canvas学习笔记(canvas绘制线条、矩形、多边形、圆、⾃定义图像)⼀、对 canvas 的理解 <canvas>标签是 HTML5 中的新标签,像所有的 dom 对象⼀样它有⾃⼰本⾝的属性、⽅法和事件。
canvas 是⽤来在⽹页上绘制图形的(我们通常称之为画布),canvas 只是图形容器,需要使⽤ js 脚本来绘制图形,可以绘制线条、矩形、多边形、圆形、圆环、组合图形、⽂字、⾃定义图像等。
浏览器⽀持注释:Internet Explorer 8 以及更早的版本不⽀持 <canvas> 标签。
Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari ⽀持 <canvas>标签。
⼆、基本⽅法绘图环境: 语法 Canvas.getContext(contextID) 参数contextID指定了您想要在画布上绘制的类型。
当前唯⼀的合法值是 "2d",它指定了⼆维绘图,并且导致这个⽅法返回⼀个环境对象,该对象导出⼀个⼆维绘图API。
【注】:getContext() ⽅法返回⼀个⽤于在画布上绘图的环境。
getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的⽅法。
绘制图形样式style(⼀般在绘制图形前先进⾏样式设定):context.fillStyle //填充样式context.strokeStyle //笔触颜⾊context.lineWidth //边框宽度绘制图像有两种⽅法:context.fill() //填充context.stroke() //绘制边框颜⾊的表⽰⽅式:颜⾊名称:"red" "green" "blue"⼗六进制颜⾊值: "#FFFFFF"三⾊值:rgb(1-255,1-255,1-255)四⾊值:rgba(1-255,1-255,1-255,透明度)三、使⽤ <canvas> Step1: ⾸先在html页⾯中添加<canvas>标签,规定好画布的id和尺⼨,代码如下:<!--规定了canvas元素的id名称为canvas、宽度为400px、⾼度为300px--><canvas id="myCanvas" width="400" height="300"/> Step2: 通过JavaScript来进⾏绘制: ⽅法⼀:<!--⽤⾕歌浏览器,获取canvas对象时需要先加载对象,所以要把该段代码放到body中,在js⽂件⾥进⾏绘制图像--><script src="canvas.js"></script> ⽅法⼆:<!--或者直接在body⾥编写代码--><script type="text/javascript"> var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); context.fillStyle = "#FF0000"; context.fillRect(50,50,150,100);</script> 图解: Step3: Step2 分步骤: 通过id来捕获canvas元素 创建 context 对象 指定 fillStyle 填充颜⾊为红⾊指定 fillRect :fillRect(起始点x轴坐标, 始点y轴坐标, 宽度, ⾼度);四、实例1--绘制线条: context.moveTo(x,y) context.lineTo(x,y)x:x坐标y:y坐标起点 moveTo 的点到终点 lineTo 的点之间画⼀条直线如果没有moveTo那么第⼀次lineTo的效果和moveTo⼀样每次lineTo后如果没有moveTo,那么下次lineTo的开始点为前⼀次lineTo的结束点1 1 // 绘制对⾓线2 2 function demo1(id){3 3 var canvas = document.getElementById(id);4 4 var context = canvas.getContext("2d");5 5 6 6 context.strokeStyle = "#ff0000";7 78 8 context.moveTo(0,0);9 9 context.lineTo(200,100);10 10 context.stroke();11 11 }View Code实例结果:1// 绘制直⾓三⾓形2function demo1(id){3var canvas = document.getElementById(id);4 var context = canvas.getContext("2d");5 6 context.strokeStyle = "#ff0000";78 context.lineTo(20, 20);9 context.lineTo(20, 70);10 context.lineTo(70, 70);11 context.lineTo(20, 20);12 context.stroke();13 }View Code【注】:1. 三⾓形有三个点,但在连线的时候还需要连回顶点;2. 最后⼀定记得加上 stroke(); 初学时容易犯这个⽑病,这相当于你把点定好了,却没⽤线连起来,岂不......实例结果:CSS属性中有⼀圆⾓设置 radius,canvas画线段也要达到这种圆⾓匾额效果,我么也有相应的办法: lineJoin 属性,可以设置线的交汇处的样式,lineJoin有3个属性值:miter(尖⾓,默认),bevel(斜⾓),round(圆⾓) lineCap 属性,定义线条的端点。
详解HTML5canvas绘图基本使⽤⽅法<canvas></canvas>是HTML5中新增的标签,⽤于绘制图形,实际上,这个标签和其他的标签⼀样,其特殊之处在于该标签可以获取⼀个CanvasRenderingContext2D对象,我们可以通过JavaScript脚本来控制该对象进⾏绘图。
<canvas></canvas>只是⼀个绘制图形的容器,除了id、class、style等属性外,还有height和width属性。
在<canvas>>元素上绘图主要有三步:1. 获取<canvas>元素对应的DOM对象,这是⼀个Canvas对象;2. 调⽤Canvas对象的getContext()⽅法,得到⼀个CanvasRenderingContext2D对象;3. 调⽤CanvasRenderingContext2D对象进⾏绘图。
绘制线段moveTo()和lineTo()以下是⼀个简单的<canvas>绘图⽰例:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>canvas绘图演⽰</title><style type="text/css">#canvas{border: 1px solid #ADACB0;display: block;margin: 20px auto;}</style></head><body><canvas id="canvas" width="300" height="300">你的浏览器还不⽀持canvas</canvas></body><script type="text/javascript">var canvas = document.getElementById("canvas");var context = canvas.getContext("2d");//设置对象起始点和终点context.moveTo(10,10);context.lineTo(200,200);//设置样式context.lineWidth = 2;context.strokeStyle = "#F5270B";//绘制context.stroke();</script></html>如果没有通过moveTo()特别指定,lineTo()的起始点是以上⼀个点为准。
摘自《HTML5高级程序设计》《HTML5揭秘》一、简单图形,整套的属性和方法专门用于绘制矩形:1、fillStyle可以设置为CSS颜色、一个图案或一种颜色渐变。
fillStyle默认是纯黑色,你可以设置成你喜欢的任意颜色。
只要页面打开着,每个绘图上下文都会记录自己的属性,除非你重置过它。
2、fillRect(x,y,width,height)绘制一个矩形,并以当前的fillStyle来填充。
3、srtokeStyle和fillStyle一样,可以设置为CSS颜色、一个图案或一种颜色渐变。
4、strokeRect(x,y,width,height)使用当前的storke style来绘制一个矩形,strokeRect并不填充中间区域,而只绘制矩形的边缘。
5、clearRect(x,y,width,height)清除指定矩形区域的像素。
二、路径按照惯例,不论开始绘制何种图形,第一个需要调用的就是beginPath。
这个简单的函数不带任何参数,它用来通知canvas将要开始绘制一个新的图形了。
对于canvas来说,beginPath函数最大的用处是canvas需要据此来计算图形的内部和外部的范围,以便完成后续的描边和填充。
路径会跟踪当前坐标,默认值是原点。
canvas本身也跟踪当前坐标,不过可能通过绘制代码来修改。
每一个canvas都有一个路径,定义路径就如同用铅笔作画。
你可以任意作地画,但它不一定是最终作品的一部分,直到你拿起画笔沾上墨水描绘这条路径。
moveTo(x,y):不绘制,只是将当前位置移动到新目标坐标(x,y),并作为线条开始点。
lineTo(x,y):绘制线条到指定的目标坐标(x,y),并且在两个坐标之间画一条直线。
不管调用它们哪一个,都不会真正画出图形,因为我们还没有主,调用stroke(绘制)和fil(填充)函数。
当前,只是在定义路径的位置,以便后面绘制时使用。
closePath(),这个函数跟lineTo很像,唯一的差别在于closePath会将路径的起始坐标自动作为目标坐标。
HTML5之Canvas绘图——使⽤Canvas绘制图形的基本教程HTML5⽕的正热,最近有个想法也是要⽤到HTML的相关功能,所以也要好好学习⼀把。
好好看了⼀下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了⼀下Canvas绘图,下边是⼏个实例,记下以备后⽤。
1、使⽤Canvas绘制直线:<!doctype html><html><head><meta charset="UTF-8"></head><style type="text/css">canvas{border:dashed 2px #CCC}</style><script type="text/javascript">function $$(id){return document.getElementById(id);}function pageLoad(){var can = $$('can');var cans = can.getContext('2d');cans.moveTo(20,30);//第⼀个起点cans.lineTo(120,90);//第⼆个点cans.lineTo(220,60);//第三个点(以第⼆个点为起点)cans.lineWidth=3;cans.strokeStyle = 'red';cans.stroke();}</script><body onload="pageLoad();"><canvas id="can" width="400px" height="300px">4</canvas></body></html>这⾥⽤到的两个API⽅法,moveTo和lineTo分别是线段的起点和终点坐标,变量为(X坐标,Y坐标),strokeStyle、stroke分别路径绘制样式和绘制路径。
H5的canvas绘图技术canvas元素是HTML5中新添加的一个元素,该元素是HTML5中的一个亮点。
Canvas元素就像一块画布,通过该元素自带的API结合JavaScript代码可以绘制各种图形和图像以及动画效果。
1.1 浏览器不兼容问题•ie9以上才支持canvas, 其他chrome、firefox、苹果浏览器等都支持•只要浏览器兼容canvas,那么就会支持绝大部分api(个别最新api除外)•移动端的兼容情况非常理想,基本上随便使用• 2d的支持的都非常好,3d(webgl)ie11才支持,其他都支持•如果浏览器不兼容,最好进行友好提示,提示内容只有在浏览器不支持时才显示。
//例如:<canvas id="cavsElem">你的浏览器不支持canvas,请升级浏览器</canvas>浏览器不兼容,也可以使用flash等手段进行优雅降级1.2 创建画布在页面中创建canvas元素与创建其他元素一样,只需要添加一个<canvas>标记即可。
该元素默认的宽高为300*15,可以通过元素的width属性和height属性改变默认的宽高。
注意:•不能使用CSS样式控制canvas元素的宽高,否则会导致绘制的图形拉伸。
•重新设置canvas标签的宽高属性会导致画布擦除所有的内容。
•可以给canvas画布设置背景色1.3 canvas坐标系在开始绘制任何图像之前,我们先讲一下canvas的坐标系。
canvas坐标系是以左上角0,0处为坐标原点,水平方向为x轴,向右为正;垂直方向为y轴,向下为正。
如下图所示:1.4 绘制线径1.获取上下文对象(CanvasRenderingContext2D)首先,获取canvas元素,然后调用元素的getContext(“2d”)方法,该方法返回一个CanvasRenderingContext2D对象,使用该对象就可以在画布上绘图了。
html5的canvas方法使用HTML5canvas的isPointInPath是一个非常重要的函数,其作用是判断某一点是否是在某个路径内.其语法如下:html5的canvas方法使用指南,canvas的方法save()保存当前环境的状态restore()返回之前保存过的路径状态和属*createEvent()getContext()返回一个对象,指出访问绘图功能必要的APItoDataUPL()返回canvas图像的URL线条样式的属*和方法属*:lineCap设置或返回线条的结束端点样式lineJoin设置或返回两条线相交时,所创建的拐角类型lineWidth设置或返回当前线条的宽度.miterLimit设置或返回最大斜接长度颜*,样式和*影属*和方法属*fillStyle设置或返回用于填充绘画的颜*,渐变或模式strokeStyle设置或返回用于笔触的颜*,渐变或模式shadowColor设置或返回用于*影的颜*shadowBlur设置或返回用于*影的模糊级别shadowOffsetX设置或返回*影距形状的水平距离shadowOffsetY设置或返回*影距形状的垂直距离方法createLinearGradient()创建线*渐变(用在画布内容上)createPattern()在指定的方向上重复指定的元素createRadialGradient()创建放*状/环形的渐变(用在画布内容上) addColorStop()规定渐变对象中的颜*或停止位置路径方法fill()填充当前绘图(路径)stroke()绘制已定义的路径beginPath()起始一条路径,或重置当前路径moveTo()把路径移动到画布中的指定点,不创建线条closePath()创建从当前点回到起始点的路径lineTo()添加一个新点,创建从该点到最后指定点的线条clip()从原始画布剪切任意形状和尺寸的区域quadraticCurveTo()创建第二次贝塞尔曲线bezierCureTo()创建上次方贝塞尔曲线arc()创建弧/曲线(用于创建圆形或部分圆)arcTo()创建两切线之间的弧/曲线isPointInPath()如果指定的点位于当前路径中,返回布尔值矩形Rect()创建矩形fillRect()绘制”被填充”的矩形strokeRect()绘制矩形(无填充)clearRect()在给定的矩形内清除指定的像素设置文本属*和方法属*:font设置或返回文本内容的当前字体属*textAlign设置或返回文本内容的当前对齐方式textBaseline设置会返回在绘制文本时使用的当前文本基线. 方法:fillText()在画布上绘制”被填充的”文本strokeT ext()在画布上绘制文本(无填充)measureText()返回包含指定文本宽度的对象转换方法scale()缩放当前绘图至更大或更小rotate()旋转当前绘图translate()重新映*花布衫的(0,0)位置transform()替换绘图的当前转换矩阵setTransform()将当前转换重置为单位矩阵.然后运行transform()。
深入探讨Canvas的二次方和三次方贝塞尔曲线1. 走进Canvas的世界Canvas是HTML5中的一个重要元素,它可以用来绘制图形,创建动画,甚至可以进行图形变换。
其中,贝塞尔曲线是Canvas中重要的绘图技术,它可以用来绘制各种复杂的曲线和路径。
本文将重点探讨Canvas中的二次方和三次方贝塞尔曲线的绘制原理和应用。
2. 二次方贝塞尔曲线在Canvas中,二次方贝塞尔曲线由起始点、控制点和终止点构成。
通过调用Canvas的API,我们可以很轻松地绘制出一条平滑的二次方贝塞尔曲线。
其中,起始点和终止点确定了曲线的起始和终止位置,而控制点则影响着曲线的形状。
通过调整控制点的位置,我们可以绘制出各种不同形状的曲线。
3. 三次方贝塞尔曲线与二次方贝塞尔曲线类似,三次方贝塞尔曲线也由起始点、两个控制点和终止点构成。
这种曲线的特点是更加灵活,可以描述出更加复杂的曲线形状。
通过Canvas的API,我们可以利用三次方贝塞尔曲线绘制出各种复杂的图形,比如圆滑的曲线、自然的弧线等。
4. 应用实例Canvas的贝塞尔曲线在很多图形处理和动画制作中都有着广泛的应用。
比如在绘制UI界面中,我们经常会使用贝塞尔曲线来绘制出圆润美观的UI元素;在游戏开发中,贝塞尔曲线可以用来实现平滑的角色移动轨迹和自然的物体弹道;在数据可视化中,我们也可以利用贝塞尔曲线来绘制出漂亮的曲线图和区域图等。
5. 个人观点对于Canvas的二次方和三次方贝塞尔曲线,我个人认为其灵活性和实用性是其最大的优点。
通过简单的几个点的控制,我们就可以绘制出各种精美的曲线和路径。
在实际的项目中,贝塞尔曲线可以帮助我们实现出更加美观和细腻的图形效果,同时也为开发者提供了更多的创意空间,可以实现出更加独特和有趣的效果。
总结通过本文的深入描述,我们可以更加全面地了解Canvas中的二次方和三次方贝塞尔曲线的绘制原理和应用。
这些曲线不仅可以帮助我们实现出更加美观和精细的图形效果,还可以为开发者带来更多的创意空间和可能性。
<canvas></canvas>是HTML5中新增的标签,用于绘制图形,这篇文章主要为大家详细介绍了HTML5 canvas基本绘图之绘制线条方法,感兴趣的小伙伴们可以参考一下<canvas></canvas>是HTML5中新增的标签,用于绘制图形,实际上,这个标签和其他的标签一样,其特殊之处在于该标签可以获取一个CanvasRenderingContext2D对象,我们可以通过JavaScript脚本来控制该对象进行绘图。
<canvas></canvas>只是一个绘制图形的容器,除了id、class、style等属性外,还有height和width属性。
在<canvas>>元素上绘图主要有三步:1.获取<canvas>元素对应的DOM对象,这是一个Canvas对象;2.调用Canvas对象的getContext()方法,得到一个CanvasRenderingContext2D对象;3.调用CanvasRenderingContext2D对象进行绘图。
线条属性除了上面用到的lineWidth属性,线条还有以下几个属性: •lineCap 属性设置或返回线条末端线帽的样式,可以取以下几个值: “butt”向线条的每个末端添加平直的边缘(默认); “round”向线条的每个末端添加圆形线帽; “square”向线条的每个末端添加正方形线帽。
•lineJoin 属性当两条线交汇时设置或返回所创建边角的类型,可以取以下几个值: “miter”创建尖角(默认); “bevel”创建斜角; “round”创建圆角。
使⽤html5Canvas绘制线条(直线、折线等)使⽤html5 Canvas绘制直线所需的CanvasRenderingContext2D对象的主要属性和⽅法(有"()"者为⽅法)如下:属性或⽅法基本描述strokeStyle⽤于设置画笔绘制路径的颜⾊、渐变和模式。
该属性的值可以是⼀个表⽰css颜⾊值的字符串。
如果你的绘制需求⽐较复杂,该属性的值还可以是⼀个对象或者对象globalAlpha定义绘制内容的透明度,取值在0.0(完全透明)和1.0(完全不透明)之间,默认值为1.0。
lineWidth定义绘制线条的宽度。
默认值是1.0,并且这个属性必须⼤于0.0。
较宽的线条在路径上居中,每边各有线条宽的⼀半。
lineCap指定线条两端的线帽如何绘制。
合法的值是 "butt"、"round"和"square"。
默认值是"butt"。
你可以点击这⾥,以帮助你更好地理解lineCap。
beginPath()开始⼀个新的绘制路径。
每次绘制新的路径之前记得调⽤该⽅法。
它将重置内存中现有的路径。
moveTo(int x, int y)移动画笔到指定的坐标点(x,y),该点就是新的⼦路径的起始点lineTo(int x, int y)使⽤直线连接当前端点和指定的坐标点(x,y)stroke(int x, int y)沿着绘制路径的坐标点顺序绘制直线closePath()如果当前的绘制路径是打开的,则关闭掉该绘制路径。
此外,调⽤该⽅法时,它会尝试⽤直线连接当前端点与起始端点来关闭路径,但如果图形已经关闭(⽐如先调⽤了stroke())或者只有⼀个点,它会什么都不做。
在Canvas的图形绘制过程中,⼏乎都是先按照⼀定顺序先定下⼏个坐标点,也就是所谓的绘制路径,然后再根据我们的需要将这些坐标点⽤指定的⽅式连接起来,就形成了我们所需要的图形。
HTML5Canvas基本绘制线条教程HTML5 Canvas基本绘制线条教程怎么画线条?和现实中画画差不多:1.移动画笔,使画笔移动至绘画的开始处2.确定第一笔的停止点3.规划好之后,选择画笔(包括画笔的粗细和颜色等)4.确定绘制因为Canvas是基于状态的绘制(很重要,后面会解释),所以前面几步都是在确定状态,最后一步才会具体绘制。
1.移动画笔(moveT o())之前我们获得了画笔context,所以以此为例,给出改方法的使用实例——context.moveTo(100,100)。
这句代码的意思是移动画笔至(100,100)这个点(单位是px)。
记住,这里是以canvas画布的左上角为笛卡尔坐标系的原点,且y轴的正方向向下,x轴的正方向向右。
2.笔画停点(lineT o())同理,context.lineTo(600,600)。
这句的意思是从上一笔的停止点绘制到(600,600)这里。
不过要清楚,这里的moveTo()``lineTo()都只是状态而已,是规划,是我准备要画,还没有开始画,只是一个计划而已!3.选择画笔这里我们暂且只设置一下画笔的颜色和粗细。
context.lineWidth = 5,这句话的`意思是设置画笔(线条)的粗细为10px。
context.strokeStyle = "#AA394C",这句话的意思是设置画笔(线条)的颜色为玫红色。
因为Canvas是基于状态的绘制,所以我们在选择画笔粗细和颜色的同时,其实也是选择了线条的粗细和颜色。
4.确定绘制确定绘制只有两种方法,fill()和stroke(),有点绘画基础的应该知道,前者是指填充,后者是指描边。
因为我们只是绘制线条,所以只要描边就可以了。
调用代码context.stroke()即可。
画一个线条不就一条线段吗!废话了这么多!那我们就开始画吧。
JavaScript Code复制内容到剪贴板你的浏览器居然不支持Canvas?!赶快换一个吧!!运行结果:我还标注了一个页面解析图,供大家参考。
HTML5Canvas中使⽤路径描画⼆阶、三阶贝塞尔曲线在HTML5 Canvas中,可以⽤以下⽅法描画三阶和⼆阶的贝塞尔曲线:
复制代码
代码如下:
context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
context.quadraticCurveTo(cpx, cpy, x, y)
贝塞尔曲线是在⼆维平⾯上由⼀个“起始点”,⼀个“结束点”,以及⼀个或多个“控制点”定义的曲线。
普通的三阶贝塞尔曲线使⽤两个控制点,⽽⼆阶曲线则只使⽤⼀个控制点。
要描画⼆阶贝塞尔曲线,只需设置结束点的坐标和控制点的坐标即可:
复制代码
代码如下:
context.moveTo(0,0);
context.quadraticCurveTo(100,25,0,50);
代码执⾏结果如下:
上⾯例⼦中的曲线从坐标(0,0)开始,到(0,50)结束,⽽⽤于控制曲线描绘的控制点的坐标为(100,25)。
相⽐⼆阶曲线,由于可以设置两个控制点,三阶贝塞尔曲线的描画更为灵活。
下⾯的代码描画了⼀条”S”形的曲线:
复制代码
代码如下:
context.moveTo(150,0);
context.bezierCurveTo(0,125,300,175,150,300);
译注2:⽬前HTML5 Canvas最⾼仅⽀持三阶贝塞尔曲线,四阶以上的曲线尚不⽀持。
学习HTML5Canvas这一篇文章就够了_做人要厚道2013的博客-CSDN博客一、canvas简介<canvas> 是HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的HTML 元素。
它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。
它最初由苹果内部使用自己MacOS X WebKit推出,供应用程序使用像仪表盘的构件和 Safari 浏览器使用。
后来,有人通过Gecko内核的浏览器 (尤其是Mozilla和Firefox),Opera和Chrome和超文本网络应用技术工作组建议为下一代的网络技术使用该元素。
Canvas是由HTML代码配合高度和宽度属性而定义出的可绘制区域。
JavaScript代码可以访问该区域,类似于其他通用的二维API,通过一套完整的绘图函数来动态生成图形。
Mozilla 程序从Gecko 1.8 (Firefox 1.5)开始支持<canvas>, Internet Explorer 从IE9开始<canvas> 。
Chrome和Opera 9+ 也支持 <canvas>。
二、Canvas基本使用2.1 <canvas>元素<canvas id="tutorial" width="300" height="300"></canvas> <canvas>看起来和<img>标签一样,只是 <canvas> 只有两个可选的属性 width、heigth 属性,而没有 src、alt 属性。
如果不给<canvas>设置widht、height属性时,则默认width 为300、height为150,单位都是px。
也可以使用css属性来设置宽高,但是如宽高属性和初始比例不一致,他会出现扭曲。
html5 画曲线函数在HTML5 Canvas中,可以使用以下两个函数来绘制曲线:1.arc()函数用于绘制圆形或部分圆弧,通过它可以创建出曲线的一部分。
它接受的参数包括:Javascript1context.arc(x, y, radius, startAngle, endAngle,anticlockwise);•x:圆心的x 坐标。
•y:圆心的y 坐标。
•radius:圆的半径。
•startAngle:起始角度(以弧度计)。
•endAngle:结束角度(以弧度计)。
•anticlockwise(可选):布尔值,表示是否逆时针方向绘制。
2.bezierCurveTo()函数用于绘制三次贝塞尔曲线,它允许您定义两个控制点和一个终点来形成一条平滑的曲线:Javascript1context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);•cp1x和cp1y:第一个控制点的坐标。
•cp2x和cp2y:第二个控制点的坐标。
•x和y:曲线的终点坐标。
要开始绘制曲线,首先需要获取Canvas的2D渲染上下文,并确保调用这些函数前已经设置了路径起点,例如通过beginPath()方法开启新的路径,然后使用moveTo()定义初始点。
示例代码片段绘制一条从原点到(200, 100) 的三次贝塞尔曲线:Javascript1var canvas = document.getElementById('myCanvas');2var ctx = canvas.getContext('2d');134ctx.beginPath();5ctx.moveTo(0, 0); // 起点67// 绘制三次贝塞尔曲线8ctx.bezierCurveTo(50, 100, 150, 30, 200, 100); // 控制点和终点910ctx.stroke(); // 描边路径,使其可见另外,如果要绘制更复杂的自由曲线,可能需要用到更多的贝塞尔曲线段或者利用quadraticCurveTo()方法绘制二次贝塞尔曲线。
canvas相关方法Canvas是HTML5中新增的一个标签,用于在网页上绘制图形、动画和交互性内容。
本文将介绍一些与Canvas相关的常用方法,包括绘制基本图形、绘制路径、绘制文本和使用样式。
一、绘制基本图形1. 绘制矩形:使用`fillRect(x, y, width, height)`方法可以绘制填充矩形,使用`strokeRect(x, y, width, height)`方法可以绘制边框矩形。
2. 绘制圆形:使用`arc(x, y, radius, startAngle, endAngle, anticlockwise)`方法可以绘制圆弧或者圆。
3. 绘制线条:使用`moveTo(x, y)`方法将画笔移动到指定位置,然后使用`lineTo(x, y)`方法绘制一条直线。
二、绘制路径1. 开始路径:使用`beginPath()`方法开始一个路径。
2. 绘制直线:使用`lineTo(x, y)`方法绘制一条直线。
3. 绘制弧线:使用`arcTo(x1, y1, x2, y2, radius)`方法绘制一条弧线。
4. 闭合路径:使用`closePath()`方法闭合路径,即将路径的终点连接到起点。
5. 填充路径:使用`fill()`方法填充路径的内部。
三、绘制文本1. 设置字体样式:使用`font`属性设置字体样式,如`ctx.font = "20px Arial"`。
2. 设置文本对齐方式:使用`textAlign`属性设置文本对齐方式,如`ctx.textAlign = "center"`。
3. 绘制文本:使用`fillText(text, x, y)`方法绘制文本,其中文本内容为`text`,位置为`(x, y)`。
四、使用样式1. 设置填充颜色:使用`fillStyle`属性设置填充颜色,如`ctx.fillStyle = "red"`。
继续讲canvas中画曲线的方法,今天讲quadraticCurveTo。
说实话这个方法有点吓人,单从函数名称上都可以初体验。
话说,我觉得有必要把这个函数名缩短。
quadratic的意思是二次,即数学中二次元方程那个二次。
而ctx.quadraticCurveTo的参数如下:
代码如下:
ctx.quadraticCurveTo(x1,y1,x,y);
其中x,y是终点的坐标,而x1,y1是曲线控制点的坐标?什么?你问我起点在哪里?起点在此之前用moveTo确定。
我之所以把控制点的坐标带上序号1,是因为后面讲的某个画曲线的函数有两个控制点,也就有x2,y2了,所以这里先打个预防针。
我们由moveTo确定的起点和quadraticCurveTo自身确定的终点,可以连接成一条直线,由于quadraticCurveTo只有一个控制点,这个控制点不是在直线左边,就是在直线右边,所以,quadraticCurveTo永远只能画弧线,还是画不出S形。
为了便于理解,我还是沿用上一篇文章的画辅助线的方法。
初步代码如下:
代码如下:
var x1=350,
y1 = 250,
x = 400,
y = 500;
ctx.beginPath();
ctx.strokeStyle="#000";
ctx.moveTo(300,300); //起点
ctx.quadraticCurveTo(x1,y1,x,y); //正牌曲线
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle = "rgba(255,0,0,0.5)";
ctx.moveTo(300,300);
ctx.lineTo(x1,y1);//本行与下一行是画控制点的线
ctx.lineTo(x,y);
ctx.moveTo(300,300);//开始连接曲线的起点和终点
ctx.lineTo(x,y);
ctx.stroke();
这里我画了两条辅助线,一条是起点与终点的连接线,一条是起点到控制点再到终点的辅助线(其实是两条),这两条线的交汇点就是quadraticCurveTo的控制点坐标。
quadraticCurveTo也只能画弧形的曲线,不过这个弧形可以很不规则,相比arc和arcTo,也算是一个进步了。
另外,quadraticCurveTo也不会像arcTo一样,出现反转的情况。
当然,如果你把控制点拉得非常远,可能图形也会变得让你不认识。
我们来试一下:
“y1 = 950;
”我只是把y1改大了一些,然后曲线就超出canvas的范围了。
不过,quadraticCurveTo画出的曲线的范围,永远无法达到或超过控制点的坐标,我们只有把控制点“控制”好,就不用担心了。
我写了一个简单的可以动的示例页,展示了quadraticCurveTo画曲线的过程,希望能帮你加深理解:
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Canvas学习--quadraticCurveTo画曲线</title>
<style type="text/css">
canvas {box-shadow: 0 0 10px rgba(0,0,0,0.2) }
</style>
</head>
<body>
<canvas id="cvs" width="800" height="600">不支持canvas</canvas>
</body>
<script type="text/javascript">
var cvs = document.getElementById('cvs'); //画布
var ctx = cvs.getContext('2d'); // 画笔
// ctx.closePath();
var x1=350,
y1 = 250,
x2 = 440,
y2 = 550,
x = 400,
y = 500;
var fan = 1,fan1 = 1;
function draw () {
ctx.clearRect(100,100,600,600);
ctx.beginPath();
ctx.strokeStyle="#000";
ctx.moveTo(300,300);
ctx.quadraticCurveTo(x1,y1,x,y);
ctx.stroke();
/*ctx.beginPath();
ctx.strokeStyle = "rgba(0,255,0,1)"
ctx.moveTo(300,300);
ctx.bezierCurveTo(x1,y1,x2,y2,x,y);
ctx.stroke();*/
ctx.beginPath();
ctx.strokeStyle = "rgba(255,0,0,0.5)";
ctx.moveTo(300,300);
ctx.lineTo(x1,y1);
// ctx.lineTo(x2,y2);
ctx.lineTo(x,y);
ctx.moveTo(300,300);
ctx.lineTo(x,y);
/*ctx.moveTo(x2,y2);
ctx.lineTo(x,y);*/
ctx.stroke();
if(x1 > 600) {
fan = -1;
} else if (x1 < 200) {
fan = 1;
}
if(y1 > 700) {
fan1 = -1;
} else if (y1 < 200) {
fan1 = 1;
}
x1 += fan;
y1 += fan1;
setTimeout(draw,22);
}
draw();
// ctx.strokeRect(100,100,50,50);
</script>
</html>
提示:您可以先修改部分代码再运行。