js系列教程10-canvas绘图全解
来源:互联网 发布:仓库数据表格 编辑:程序博客网 时间:2024/05/22 05:07
全栈工程师开发手册 (作者:栾鹏)
快捷链接:
js系列教程1-数组操作全解
js系列教程2-对象和属性全解
js系列教程3-字符串和正则全解
js系列教程4-函数与参数全解
js系列教程5-容器和算法全解
js系列教程6-BOM操作全解
js系列教程7-DOM操作全解
js系列教程8-事件全解
js系列教程9-表单元素全解
js系列教程10-canvas绘图全解
js系列教程11-json、ajax、comet全解
js系列教程12-离线应用与存储全解
js系列教程13-原型、原型链、作用链、闭包全解
一、Canvas是什么?
Canvas就是一个画布,可以进行画任何的线、图形、填充等一系列的操作,而且操作的画图的就是js,所以让js编程到了嗑药的地步。另外Canvas不仅仅提供简单的二维矢量绘图,也提供了三维的绘图,以及图片处理等一系列的api支持。
二、Canvas重要的Context对象
(1) 要使用Canvas来绘制图形必须在页面中添加Canvas的标签。
例如: <canvas id="demoCanvas" width="500" height="500"></canvas>
(2) 当然只有上面的标签,只能是创建好了一个画布,其中width和height属性就是设置画布的大小。Id属性也是必须的,后面要用Id来拿到当前的Canvas的Dom对象。通过此Canvas的Dom对象就可以获取他的上下文了,Canvas绘制图形都是靠着Canvas对象的上下文对象。
代码:
<script type="text/javascript">//第一步:获取canvas元素var canvasDom = document.getElementById("demoCanvas");//第二步:获取上下文if(canvasDom .getContext){ //判断浏览器是否支持canvas //context是画布,getContext获取绘图上下文对象,也有名为WebGL的3d上下文 var context = canvasDom .getContext("2d"); }</script>
(3) Context上下文默认两种绘制方式:第一种:绘制线(stroke),第二种:填充:fill。
注意:决定了使用哪种方式之后,在填充或者绘制线之前先设置样式。
绘制矩形
context.fillStyle = "#0000ff"; //填充颜色context.fillRect(10,10,70,70); //填充矩形,xy宽高(像素)context.lineWidth = 20; //边框宽度context.lineCap = "round"; //线条末端形状,butt平头,round圆头,square方头,context.lineJoin = "round"; //线条交叉方式,round圆交,bevel斜交,miter斜接context.strokeStyle = "red"; //描边颜色context.strokeRect(50,50,50,50); //描边矩形context.clearRect(50,50,20,20); //清除一块矩形区域
绘制路径
context.beginPath(); //创建路径context.arc(200,100,20,0,2*Math.PI,false);//绘制圆参数:圆心坐标,半径,起始角度,是否顺时针。 //arcTo绘制圆弧context.moveTo(200,100); //移动绘图游标context.lineTo(200,15); //绘制直线,从游标位置惠子直线到参数,//bezierCurveTo绘制曲线,quadraticCurveTo绘制二次曲线,reac绘制矩形,context.fillStyle = "rgba(0,0,0,1)"context.stroke(); //用strokeStyle描边context.fill(); //用fillStyle填充
绘制文本
context.font = "bold 14px Arial"; //设置文本样式,大小,字体context.textAlign="center"; //文本对齐方式,start、endcontext.textBaseline = "middle"; //上下对齐方式,top、middle、bottomcontext.fillText("文本",200,15); //fillText使用fillStyle,strokeText使用strokeStylecontext.globalAlpha =0.5; //设置全局透明度//context.save(); //保存当前状态context.translate(10,10); //坐标平移,//transform矩阵变换,setTransform先恢复默认再矩阵变换context.rotate(1); //旋转角度,scale缩放比例,
渐变
createLinearGradient线性渐变、createRadialGradient辐射渐变
渐变线
context.moveTo(0,0);context.lineTo(400,300);var gnt1 = context.createLinearGradient(0,0,400,300);//线性渐变的起止坐标gnt1.addColorStop(0,'red'); //创建渐变的开始颜色,0表示偏移量gnt1.addColorStop(1,'yellow'); //创建渐变的结束颜色,1表示偏移量,一个渐变中可以写任意个渐变颜色context.lineWidth=3;context.strokeStyle = gnt1;context.stroke();
渐变矩形
var gnt1 = context.createLinearGradient(10,0,390,0); gnt1.addColorStop(0,'red'); //开始处颜色 gnt1.addColorStop(0.5,'green');//中间处颜色 gnt1.addColorStop(1,'blue'); //结尾处颜色 context.fillStyle = gnt1; context.fillRect(10,10,380,280);
渐变圆
var gnt = context.createRadialGradient(200,300,50,200,200,200);gnt.addColorStop(1,'red');gnt.addColorStop(0,'green');context.fillStyle = gnt;context.fillRect(0,0,800,600);
这里需要说明的是createRadialGradient方法,参数有(Xstart,Ystart,radiusStart,XEnd,YEnd,radiusEnd),也就是说,它在实行渐变时,使用了两个圆,一个是原始的圆,一个是渐变式圆,其实,这种通过坐标与半径控制的方式可以实现很多样式,
drawImage绘制图像
var imageDom=document.getElementById("image"); context.drawImage(imageDom,10,10,20,20); //起点为(10,10),图像大小会变成20x20像素;
shadowColor、shadowOffsetX、shadowOffsetY、shadowBlur阴影
context.shadowColor="rgba(0,0,0,0.5)" //设置阴影颜色 context.shadowOffsetX=5; //设置形状或路径x轴方向的阴影偏移量,默认值为0; context.shadowOffsetY=5; //设置形状或路径y轴方向的阴影偏移量,默认值为0; context.shadowBlur=4; //设置模糊的像素数,默认值为0,即不模糊。 //绘制半透明的蓝色矩形 context.fillStyle="rgba(0,0,255,1)"; context.fillRect(30,30,50,50);
createPattern填充描边模式
var imageDom=document.images[0]; pattern=context.createPattern(imageDom,"repeat"); //repeat 默认。该模式在水平和垂直方向重复。//repeat-x 该模式只在水平方向重复。//repeat-y 该模式只在垂直方向重复。//no-repeat 该模式只显示一次(不重复)。context.fillStyle=pattern; context.fillRect(10,10,150,150);
scale、translate、rotate图像变换
//缩放图像 //scale(scaleX,scaleY):缩放图像,在x方向乘以scaleX,在y方向乘以scaleY。 //scaleX和scaleY的默认值都是1.0 context.scale(0.8,0.8); //变换原点 //translate(x,y):将坐标原点移动到(x,y)。执行这个变换后,坐标(0,0)会变成之前由(x,y)表示的点 context.translate(100,100); //旋转//rotate(angle):围绕原点旋转图像angle弧度context.rotate(1);
toDataURL将canvas转化为图片数据
var imgurl = canvasDom.toDataURL("image/png");var image = document.createElement("img");image.src = imgurl;hintdiv1.appendChild(image);
- js系列教程10-canvas绘图全解
- js系列教程8-事件全解
- js高级程序设计笔记10--canvas绘图
- Canvas绘图-js
- python数据可视化系列教程——matplotlib绘图全解
- js系列教程1-数组操作全解
- js系列教程2-对象、对象属性全解
- js系列教程3-字符串、正则表达式全解
- js系列教程4-函数、函数参数全解
- js系列教程5-数据结构和算法全解
- js系列教程6-BOM操作全解
- js系列教程7-DOM操作全解
- js系列教程9-表单元素全解
- js系列教程12-浏览器存储全解
- Html5 系列之:Canvas绘图
- js+canvas实现简单绘图
- [js高手之路] html5 canvas系列教程
- [js高手之路] html5 canvas系列教程
- Android Code Generator
- Java 里面split用法小结
- 笔记——01背包
- 新旧animator编辑问题
- 正则表达式使用规则
- js系列教程10-canvas绘图全解
- Orclae数据库
- hibernate 结合MySQL使用
- 博弈入门---(巴什博弈,威佐夫博弈,nim博弈)
- XStream解析
- 字节缓冲
- geometry 基础数学题,(自己易错)
- 设计模式学习笔记五:抽象工厂(Abstract Factory)
- NPM 使用介绍