<canvas>
本身并没有绘制能力(它仅仅是图形的容器),是一块无色透明的区域,就像一个可以设置宽度高度没有背景的DIV一样,你必须使用JavaScript脚本来完成在其中的绘图任务。
<canvas id="myCanvas" width="600" height="600"></canvas>
注意:默认情况下 <canvas>
元素没有边框和内容,width 和 height 属性定义的画布的大小.
var c=document.getElementById("myCanvas");
var pen=c.getContext("2d");
1.绘制一个白色的矩形:pen.fillStyle = "#fff";
·// 绘制一个白色填充的矩形pen.fillRect(0,0,30,20);
pen.strokeRect(30,30,20,20);
// 绘制一个白色矩形(只有边框)
pen.strokeStyle = '#ccc';
pen.moveTo(20,10);
// 把路径移动到画布中的指定点pen.lineTo(40,30);
// 添加一个新点,然后在画布中创建从该点到最后指定点的路径。pen.stroke();
//通过开始坐标和结束坐标的路径,来绘制一条直线
pen.beginPath();
pen.fillStyle = "red";pen.arc(30,30,10,0,2*Math.PI,false);
pen.fill();
pen.closePath();
var step = 0;
setInterval(function(){
step ++;
pen.clearRect(0,0,300,400);
if(step <= 25) {
pen.translate(10, 0);
} else {
pen.translate(-10, 0);
if(step >= 50){
step = 0;
}
}
pen.fillRect(0,30,5,5); },30);
制作思路:一个div用来显示图片或者文字在底层 ,canvas设置z-index做蒙版在上层,然后实现刮的效果(:
globalCompositeOperation = “destination-out”;
<canvas id="canvas" width="1200" height="600" ></canvas>
<div class="page"> 谢谢惠顾 </div>
var mousedown=false;
function eventDown(e){
e.preventDefault();
mousedown=true;
}
function eventUp(e){
e.preventDefault();
mousedown=false;
}
function eventMove(e){
e.preventDefault();
if(mousedown) {
var x=event.clientX,
y=event.clientY;
with(pen) {
beginPath()
arc(x, y, 10, 0, Math.PI * 2);//绘制圆点
fill();
}
}
}
canvas.addEventListener('mousedown', eventDown);
canvas.addEventListener('mouseup', eventUp);
canvas.addEventListener('mousemove', eventMove);
}
注意:此案例只实现了刮刮乐的基本绘制
制作思路:就是画好几个点,然后这些点之间用线连接起来,然后再移动这些点,就会实现这样的效果
function draw() {
var w = canvas.width, //获取画布宽高 (运动的点不能超出画布范围)
h = canvas.height,
pointlength = 10, //画布上点的个数
pintArray = [], //存储这几个点的坐标
oldPintArray = [], //存储点运动的轨迹坐标(为了营造有阴影的效果,我们把每条线后都加上颜色渐浅的跟随线)
lineArray = [], //存储这些跟随线的点的坐标
followlength = 20, //设置跟随线的条数(也就是跟随点点条数,因为这些线都是由点连接起来的,是不)
rgb; //颜色值
canvas.style.background = "#000";
//随机数
function ran(n,m) {
var num = parseInt(Math.random() * (m - n) + n);
return num;
}
//随机出现点的坐标和速度并储存到pintArray中;
for (var i = 0; i<pointlength; i++){
pintArray.push({
'x': ran(0,w),
'y': ran(0,h),
'spx': ran(-10,10),
'spy': ran(-10,10)
});
}
//为了让页面的线看起来更炫,我们让线每隔一段时间改变一个颜色
setInterval(function() {
rgb = ran(0,256)+","+ran(0,256)+","+ran(0,256);
},2000); setInterval(function() {
oldPintArray =[];
for (var i = 0; i<pintArray.length; i++){
oldPintArray.push({ //记录并存储每个点运动过坐标的,也就是辅助线的点的坐标
'x': pintArray[i].x,
'y': pintArray[i].y
})
pintArray[i].x = pintArray[i].x + pintArray[i].spx;
pintArray[i].y = pintArray[i].y + pintArray[i].spy;
if(pintArray[i].x<0 || pintArray[i].x>w) {
pintArray[i].spx = -pintArray[i].spx;
}
if(pintArray[i].y<0 || pintArray[i].y>h) {
pintArray[i].spy = -pintArray[i].spy;
}
}
lineArray.push(oldPintArray);
if(lineArray.length>10){
lineArray.shift();
}
clear();
//画pointlength个点,连线;pointlength为点的个数
pen.beginPath();
pen.strokeStyle = "rgba("+rgb+",1)"; //线的颜色
pen.moveTo(pintArray[0].x,pintArray[0].y); //画第一个点的坐标
for( var j = 1; j<pointlength; j++){ //剩下的点
pen.lineTo(pintArray[j].x,pintArray[j].y);
}
pen.closePath();
pen.stroke(); for(var i = 0; i<lineArray.length; i++) {
pen.beginPath();
pen.strokeStyle = "rgba("+ rgb +","+ i/lineArray.length+")";//改变辅助线的透明度,距离运动点越远点的,透明度越低
pen.moveTo(lineArray[i][0].x,lineArray[i][0].y); //绘制辅助线
for(var j = 1; j<lineArray[i].length; j++) {
pen.lineTo(lineArray[i][j].x,lineArray[i][j].y);
}
pen.closePath();
pen.stroke();
} },30);
}
fillStyle 设置或返回用于填充绘画的颜色、渐变或模式。
strokeStyle 设置或返回用于笔触的颜色、渐变或模式。
shadowColor 设置或返回用于阴影的颜色。
shadowBlur 设置或返回用于阴影的模糊级别。
shadowOffsetX 设置或返回阴影与形状的水平距离。
shadowOffsetY 设置或返回阴影与形状的垂直距离。
lineCap 设置或返回线条的结束端点样式。
lineJoin 设置或返回两条线相交时,所创建的拐角类型。
lineWidth 设置或返回当前的线条宽度。
miterLimit 设置或返回最大斜接长度。
rect() 创建矩形。
fillRect() "被填充"的矩形。
strokeRect() 绘制矩形(无填充)。
clearRect() 在给定的矩形内清除指定的像素。
fill() 填充当前绘图(路径)。
stroke() 绘制已定义的路径。
beginPath() 起始一条路径,或重置当前路径。
moveTo() 把路径移动到画布中的指定点,不创建线条。
closePath() 创建从当前点回到起始点的路径。
lineTo() 添加一个新点,然后在画布中创建从该点到最后指定点的线条。
arc() 创建弧/曲线(用于创建圆形或部分圆)。
arcTo() 创建两切线之间的弧/曲线。
scale() 缩放当前绘图至更大或更小。
rotate() 旋转当前绘图。
translate() 重新映射画布上的 (0,0) 位置。
transform() 替换绘图的当前转换矩阵。
setTransform() 将当前转换重置为单位矩阵。然后运行 transform()。