canvas绘图基础
来源:互联网 发布:合同软件 编辑:程序博客网 时间:2024/05/17 04:43
canvas使用场景
动画、h5游戏、图表
chart.js是使用canvas实现的一个做图表的库
phaser是使用canvas实现的做游戏的库
canvas坐标体系
关于画布大小的坑 画布默认大小为300*150
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>canvas</title> <style type="text/css"> .canvas{ border: 1px solid red; width: 100px; height: 100px; } </style></head><body><!--在css中设置画布的宽高会出问题 这是个坑 当然也可以使用canvas.width /height方式--><canvas id="myCanvas" class="canvas"> 您的浏览器不支持canvas</canvas><canvas id="myCanvas2" class="canvas"> 您的浏览器不支持canvas</canvas><script type="text/javascript"> var canvas = document.getElementById('myCanvas'); canvas.width = 100;//通过css样式控制的大小会有缩放 canvas.height = 100; var ctx = canvas.getContext('2d'); ctx.moveTo(0, 0); ctx.lineTo(100 , 100); ctx.stroke(); var canvas2 = document.getElementById('myCanvas2'); canvas2.width = 200;//这里才是画布大小 canvas2.height = 200; var ctx2 = canvas2.getContext('2d'); ctx2.moveTo(0, 0); ctx2.lineTo(200 , 200); ctx2.stroke();</script></body></html>
结果如下
很明显左边的图被拉伸了有模糊的地方
lineto只是将路径存在内存中
stroke绘制
beginpath会将之前存在内存的路径清空
closepath会自动连接起始点和末尾点
绘制圆
ctx.beginPath();ctx.arc(300 ,300, 50,0 ,2 * Math.PI);//圆心坐标 半径 起始弧度 到终点弧度ctx.strokeStyle ="000";ctx.stroke();
绘制矩形
//矩形ctx.strokeRect(300,100,200,100)
平移、旋转、缩放
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><canvas id="myCanvas" width="600px" height="400px"></canvas><script type="text/javascript"> var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); //平移的是坐标系的原点 要放在前面 ctx.moveTo(0 , 0); ctx.lineTo(100, 100); ctx.stroke(); ctx.translate(0 , 100); ctx.beginPath(); ctx.moveTo(0 , 0); ctx.lineTo(100, 100); ctx.stroke(); //旋转 ctx.rotate(Math.PI / 4); ctx.beginPath(); ctx.moveTo(0 , 0); ctx.lineTo(100, 100); ctx.strokeStyle = "red"; ctx.stroke(); //缩放 ctx.scale(1, 0.5); ctx.fillRect(0, -100, 100, 100);</script></body></html>
但是以上方法不常用
save 和restore 总是成对出现
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><canvas id="myCanvas" width="600px" height="400px"></canvas><script type="text/javascript"> var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); ctx.save(); //平移的是坐标系的原点 要放在前面 ctx.moveTo(0 , 0); ctx.lineTo(100, 100); ctx.stroke(); ctx.translate(0 , 100); ctx.beginPath(); ctx.moveTo(0 , 0); ctx.lineTo(100, 100); ctx.stroke(); //旋转 ctx.rotate(Math.PI / 4); ctx.beginPath(); ctx.moveTo(0 , 0); ctx.lineTo(100, 100); ctx.strokeStyle = "red"; ctx.stroke(); //缩放 ctx.scale(1, 0.5); ctx.fillRect(0, -100, 100, 100);//恢复至save的状态 ctx.restore(); ctx.beginPath(); ctx.moveTo(200,200); ctx.lineTo(300,300); ctx.stroke();</script></body></html>
渐变
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><canvas id="myCanvas" width="600px" height="400px"></canvas><script type="text/javascript"> var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); //线性渐变 // 第一个点的x,y坐标 第二个点的 var linearGradient = ctx.createLinearGradient(50,50, 150,150); linearGradient.addColorStop(0,'rgb(255,0,0)'); linearGradient.addColorStop(1,'rgb(0,0,255)');//百分百位置的颜色 ctx.fillStyle = linearGradient; ctx.fillRect(0,0,200,200);//径向渐变 第一个圆的坐标加半径 第二个的 var radialGradient = ctx.createRadialGradient(400,150 ,0 , 400 ,150 ,100) radialGradient.addColorStop(0,'rgb(255,0,0)'); radialGradient.addColorStop(1,'rgb(0,0,255)'); ctx.fillStyle = radialGradient; ctx.beginPath(); ctx.arc(400,150,100,0,Math.PI * 2); ctx.fill();</script></body></html>
文字
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><canvas id="myCanvas" width="600px" height="400px"></canvas><script type="text/javascript"> var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext("2d"); var str = "hello world"; ctx.font = "50px sans-serif"; ctx.textAlign = "center"; ctx.textBaseline = "top"; ctx.fillText(str, 300,0); //文字 坐标 ctx.strokeText(str,0 ,200); var width = ctx.measureText(str).width;//计算文本的宽度 console.log(width); //文本高度 canvas没有直接的方法</script></body></html>
阅读全文
0 0
- canvas绘图基础整理
- canvas绘图基础
- canvas绘图基础
- Android 绘图基础Canvas
- canvas标签绘图基础
- HTML5-Canvas绘图基础
- canvas绘图基础
- android基础--canvas绘图
- android基础--canvas绘图
- canvas绘图基础
- canvas绘图基础
- canvas绘图基础(一)
- canvas绘图基础(四)
- canvas绘图基础(五)
- HTML5特性 > Canvas >基础绘图
- JavaScript-Html-绘图-canvas基础
- canvas绘图基础(二)
- canvas绘图基础(三)
- windows上的tail指令使用
- Servlet 访问WEB资源的方式
- static
- Hadoop
- 主成分分析(PCA)原理总结
- canvas绘图基础
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- C语言输入输出函数
- SQL存储过程批量插入
- 将字节转化成其他单位
- Postgres 10.1 安装步骤
- Leetcode 100 Liked Questions
- select、poll、epoll之间的区别总结
- Android_Glide图片加载框架