HTML5 CANVAS
1 <canvas>标签有三个属性,id,width,height,必须。
2
var canvas = document.getElementById("some_id"); var context = canvas.getContext("2d"); // 找起点 context.moveTo(10, 20); // 找终点和形状 context.lineTo(100, 200); // 实际画到画布上去 context.stroke();
3 影响线的三个属性,lineWidth,strokeStyle,lineCap
lineWidth: 线的宽度;
context.lineWidth = 5px;
strokeStyle: 线的颜色;
context.strokeStyle = "#1f1f1f"; context.strokeStyle = "red"; context.strokeStyle = "rgb(100, 20, 30)";
lineCap: 线的头部形状;
context.lineCap = "butt"; // 默认,方头 context.lineCap = "round"; // 圆头 context.lineCap = "square"; // 方头,比butt多半个线的宽度
4 beginPath();
该方法在决定绘画下一条线时,且线的属性发生变化的时候,调用。
不然的话,会把之前画的线用新制定的线的属性重新绘画一次。
5 closePath();
用来把画笔与绘画的起点连接起来,形成一个封闭的图形。所以说和stroke注定是不能同时出现的。
也只有封闭了之后,才可能填充颜色。context.fillStyle("some color"); context.fill();
6 context.fillStyle 用来指定一个封闭图形的填充色
context.fillStyle = "blue"; // 设定填充色为蓝色;
context.fill(); // 开始填充
这样一来有一个问题,会把原来图形的边线样式覆盖掉。
所以一般先填充封闭图形,然后再绘制封闭图形的边缘。
7 context.stroke();
这个方法的作用就是用来描边。。。
8 绘制矩形
// 填充矩形 context.fillRect(x, y, width, height); // 绘制矩形 context.strokeRect(x, y, width, height);
fillRect的填充色由fillStyle指定;
strokeRect的边框属性由lineWidth和strokeStyle指定;
context.rect(x, y, width, height);
这也是花方块呢。。。。
9 绘制弧形
context.arc(x, y, radius, startAngle, endAngle);
context.stroke();
x,y指定vanvas上的坐标;
radius指定圆弧的半径;
startAngle,endAngle指定开始位置和结束位置。
从开始位置开始,顺时针画弧到结束位置。
另外,closePath会把弧的两端用一条直线连接起来。
10 贝塞尔曲线,好吧,我承认我学不明白。
11 变换: 变换的不是方法,而是思想
平移变换: translate(x, y); 让canvas沿x方向移动xPX,沿y方向移动yPX。默认的坐标位置是(0, 0)。
已经提供的方法,如rect(), strokeRect()这些方法是一个设计好的,画一个独立的图形。
但是,arc()方法并不是画完一个完整的图形,所以说当确定画完了之后,调用stroke()方法;准备画下一个图形了,需要调用beginPath()方法,然后继续。。。
context.beginPath(); context.arc(xPosition, yPosition, radius, startAngle, endAngle); context.stroke(); context.translate(120, 0); context.beginPath(); context.arc(xPosition, yPosition, radius, startAngle, endAngle); context.stroke(); context.translate(120, 0); context.beginPath(); context.arc(xPosition, yPosition, radius, startAngle, endAngle); context.stroke();
缩放变换: scale(a, b);
a用来设定x轴方向上的变化,1:100%; 2:200%; 0.5:50%...
b用来设定y轴方向上的变化,1:100%; 2:200%; 0.5:50%...
影响的有: x,y坐标; 线宽度,半径等等。
旋转变换: rotate(angle);
angle,顺时针旋转的角度。一圈是2*Math.PI。
如果转一圈,画10个图形,那么每一次旋转2*Math.PI/9。
目前尚不知道,为什么moveTo(500, 500)和translate(500, 500)有啥区别。。。
12 保存和恢复变换之前的canvas的状态
context.save(); // 相当于设定一个savePoint。它会记住当前变换的状态。
context.restore(); // 返回之前的savePoint指定的状态。
13 透明
a:
context.fileStyle = "rgba(red, green, blue, alpha)";
前三个参数的最大值为255,alpha的值介于1和0之间,0使该图形完全不可见,1使该图形完全可见。
b:
context.globalAlpha = 0.5;
这样一来,后面所有的填充色,边框色都变成了半透明的了,直到重新修改globalAlpha的值为止。
14 清除一个canvas
context.clearRect(0, 0, canvas.width, canvas.height);
15 javascript事件处理函数有一个参数event
event.pageX: 当前鼠标所在页面X轴上的位置;
event.pageY: 当前鼠标所在页面Y轴上的位置;
16
canvas.onmousedown = functionOne;
canvas.onmouseup = functionTwo;
canvas.onmouseout = functionThree; // 鼠标不在canvas上面了;
canvas.onmousemove = functionFour; // 鼠标在canvas上移动;
17 保存画布图像
var dataUrl = canvas.toDataURL(); // 这里是canvas对象,不是context对象~
var dataUrl = canvas.toDataURL("image/jpeg"); // 默认的是PNG格式的图片,通过传递参数可以修改。。。。
dataUrl能够干什么?
1 window.open(dataUrl);
2 window.location = dataUrl;
3 document.getElementById("pic_id").src = dataUrl;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。