HTML5 Canvas学习笔记之详解弧线的绘制
来源:互联网 发布:html怎么调用php文件 编辑:程序博客网 时间:2024/05/22 03:42
Canvas翻译过来呢就是画布
所以Canvas的作用就是把网页当成一张画布,在其中画画——说实话H5中最令我感兴趣的就是Canvas了。
在html中引入canvas
<canvas id="canvas" style="height:100%"> 当前浏览器不支持Canvas,请更换浏览器后再试</canvas>
绘制一条线、矩形与圆弧
这里先说Canvas的几个属性:
- 绘制一条线
- 绘制矩形
- 绘制圆
window.onload=function(){ var canvas=document.getElementById('canvas'); canvas.width=800; canvas.height=800; var context=canvas.getContext('2d'); context.beginPath(); context.moveTo(100,100);//从(100,100)点到(700,700)划一根直线 context.lineTo(700,700); context.lineWidth=5; //指定样式,直线宽度为5,直线的颜色为红色 context.strokeStyle="red"; context.stroke(); context.closePath();//必须closepath,不然下面会从这儿开始 //绘制矩形 context.beginPath(); context.moveTo(100,100); context.lineTo(700,700); context.lineTo(100,700); context.lineTo(100,100); context.lineWidth=5; context.strokeStyle="blue"; context.stroke(); context.fillStyle="grey";//设置填充样式 context.fill(); context.closePath(); //绘制圆弧 context.beginPath(); context.arc(300, 300, 200, 0, 1.5*Math.PI, false); //acr()的参数为(X,Y,R,) context.lineWidth=5; context.strokeStyle="#005"; context.stroke(); context.closePath();}
效果图:
弧线的绘制
- arc()
- arcTo()
acr() ,圆弧和圆角矩形
context.arc(centerX,centerY,radius,startingAngle,endingAngle,anticlockwise=false)
弧度永远是从顺时针开始0,0.5pi ,1.0pi, 1.5pi, 2pi,不管anticlockwise等于多少,这些值永远不变。
window.onload=function(){ var canvas=document.getElementById('canvas'); canvas.width=800; canvas.height=800; var context=canvas.getContext('2d'); context.beginPath(); context.arc(300, 300,100, 0, 1.5*Math.PI, false); context.lineWidth=5; context.strokeStyle="#005"; context.stroke(); context.closePath(); context.beginPath(); context.arc(600, 300, 100, 0, 1.5*Math.PI, true);//逆时针 context.lineWidth=5; context.strokeStyle="#005"; context.stroke(); context.closePath();}
运行截图
由此可见,1.5pi永远是上方的点
利用圆弧绘制圆角矩形
function drawRoundRect(cxt,x,y,width,height,radius){ cxt.save() cxt.translate(x,y) pathRoundRect(cxt,width,height,radius) cxt.stroke() cxt.restore()}function pathRoundRect(cxt,width,height,radius){ cxt.beginPath() cxt.arc(width-radius,height-radius,radius,0,Math.PI/2) cxt.lineTo(radius,height) cxt.arc(radius,height-radius,radius,Math.PI/2,Math.PI) cxt.lineTo(0,radius) cxt.arc(radius,radius,radius,Math.PI,Math.PI*3/2) cxt.lineTo(width-radius,0) cxt.arc(width-radius,radius,radius,Math.PI*3/2,Math.PI*2) cxt.closePath()}
arcTo()
context.arcTo(x1,y1,x2,y2,radius)
利用控制点(x1,y1),(x2,y2)。起始点不一定是(x0,y0),终点也不一定是(x2,y2)
window.onload=function(){ var canvas=document.getElementById('canvas'); canvas.width=800; canvas.height=800; var context=canvas.getContext('2d'); context.beginPath() context.moveTo(150,150) context.arcTo(600,150,650,650,300) context.lineWidth=5 context.strokeStyle='red' context.stroke() context.beginPath() context.moveTo(150,150) context.lineTo(650,150) context.lineTo(650,650) context.lineWidth=5 context.strokeStyle='gray' context.stroke()}
可以尝试改变radius的值
radius=600
贝塞尔Bezier二次曲线
context.moveTo(x0,y0)
context.quadraticCurveTo(x1,y1,x2,y2)
指定起始点(x0,y0),终止点(x2,y2),控制点(x1,y1)
贝塞尔曲线和arcTo的含义其实类似,但是这里的起始点和终止点就是真正的起始点和终止点,所以画出的并不是真正的圆弧,而是曲线。
可以上http://tinyurl.com/html5quadratic
上查看,这里形象的展示了quadratic的用法
贝塞尔三次曲线
拥有两个控制点,可以绘制花瓣、波浪效果等
context.moveTo(x0,y0)
context.bezierCurveTo(x1,y1,x2,y2,x3,y3)
可以上查看演示
http://blogs.sitepointstatic.com/examples/tech/canvas-curves/bezier-curve.html
该文章是学习了慕课网上Canvas绘图详解而总结的学习笔记
http://www.imooc.com/learn/185
感谢老师!
我的代码在https://github.com/daisyHawen/html5-canvas-stars.git
在其中展示了如何使用这些canvas基本属性,同时展示了一个实现绘制一片星空效果:
- HTML5 Canvas学习笔记之详解弧线的绘制
- HTML5学习笔记之canvas绘制圆形
- HTML5学习笔记之使用canvas绘制矩形
- HTML5绘图基础_09_绘制弧线详解
- canvas 绘制弧线
- [HTML5].Canvas.easel.js.arc.arcTo 绘制弧线
- html5之canvas绘制
- HTML5学习笔记之canvas
- html5 canvas学习--绘制文字
- Html5 Canvas初探学习笔记(2) -绘制深入
- html5学习笔记二:利用canvas绘制简单图形
- HTML5 学习笔记15-Canvas图形绘制处理
- DayDayUP之HTML5学习笔记五---Canvas简单的使用
- html5之Canvas绘制刮刮卡
- HTML5之canvas绘制图片
- html5中的画布canvas---画出弧线、旋转的图形
- html5的canvas绘制线条,moveTo和lineTo详解
- HTML5之canvas详解
- xsl-fo图文混排的问题解决
- uva 11401 荣斥
- 1007. Maximum Subsequence Sum (25)
- Android笔记activity的生命周期
- hdoj 2050 折线分割平面
- HTML5 Canvas学习笔记之详解弧线的绘制
- 1.UI
- 新的旅程-为什么开始写博客
- 个人学习-java-this关键字使用
- 。。。杂谈。。。
- 2.UIView的认识
- 思维导图之《时间的朋友》
- 嵌入式linux中nRF24L01驱动(主控板tiny4412)
- 迭代器模式——解决问题的第三者