重复canvas元素



canvas绘制图像
drawImage() 方法在画布上绘制图像、画布或视频。
drawImage() 方法也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸。
context.drawImage(img,x,y); 在canvas的位置
context.drawImage(img,x,y,width,height); 在画布上定位图像,并规定图像的宽度和高度:
context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 前四个设定目标元素的位置和宽高,后四个设定canvas元素定位位置宽和高
canvas渐变
线性渐变
createLinearGradient(x1,y1,x2,y2);线性渐变必须在填充渐变区域里定义渐变,否则没有效果。
把线性渐变保存在一个变量bg里,bg.addColorStop(numbe(小数),颜色); 把变量填充fillStyle.


径向渐变
createRadialGradient(x1, y1, r1, x2, y2, r2); 起始点的坐标和半径 结束点的坐标和半径


canvas 阴影
shadowColor shadowOffsetX shadowOffsetY shadowBlur

canvas剪切
clip() 方法从原始画布中剪切任意形状和尺寸。
提示:一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。您也可以在使用 clip() 方法前通过使用 save() 方法对当前画布区域进行保存,并在以后的任意时间对其进行恢复(通过 restore() 方法)。
canvas 合成(新像素和旧像素的合并方式)
默认source-over 常用source-over destination-over copy

将canvas内容导出 (注意:受同源策略限制,需开启服务器,否则会报错)canvas.toDataURL();是canvas自身的方法不是上下文对象。将canvas的内容抽取成一张图片以base64的编码格式,将canvas的内容放入ing元素里

获取canvas像素信息
getImageData() 方法返回 ImageData 对象,该对象拷贝了画布指定矩形的像素数据。
对于 ImageData 对象中的每个像素,都存在着四方面的信息,即 RGBA 值:
- R - 红色 (0-255)
- G - 绿色 (0-255)
- B - 蓝色 (0-255)
- A - alpha 通道 (0-255; 0 是透明的,255 是完全可见的
getImageData(x,y,dx,dy);//受同源策略
您也可以使用 getImageData() 方法来反转画布上某个图像的每个像素的颜色。
var imgData=ctx.getImageData(10,10,50,50);
ctx.putImageData(imgData,10,70);
putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight);
canvas命中检测 isPointPath(x,y)检测是否在区域内 isPointStroke(x,y)检测是否在直线上 返回 true 或 false
还可以检测当前的的像素值,如果为透明,则该点不在路径上
Canvas的fill方法之“非零环绕原则nonzero”与“奇偶原则evenodd”https://www.jianshu.com/p/d4b8b5d931df