Zzhangxiaohuiupdate
77934e92创建于 2021年4月14日历史提交
//画布封装函数
function canvas(o){
		o.dom.innerHTML="";
        var c=document.createElement("canvas");
        c.width=o.dom.offsetWidth;
        c.height=o.dom.offsetHeight;
        o.dom.appendChild(c);
        
        var ctx=c.getContext("2d");
			//阴影水平距离
		if(!!o.shadowOffsetX) ctx.shadowOffsetX=o.shadowOffsetX;
		//阴影垂直距离
		if(!!o.shadowOffsetY ) ctx.shadowOffsetY =o.shadowOffsetY ;
		//阴影扩张
		if(!!o.shadowBlur) ctx.shadowBlur=o.shadowBlur;
		//阴影颜色
		if(!!o.shadowColor) ctx.shadowColor=o.shadowColor; 
	if(!!o){
		for (var i = 0; i < o.s.length; i++) {
			ctx.beginPath();
			//渐变模式设置
			if(!!o.s[i].fillLinear){
				var grd = ctx.createLinearGradient(o.s[i].fillLinear[0][0],
																						o.s[i].fillLinear[0][1],
																						o.s[i].fillLinear[1][0],
																						o.s[i].fillLinear[1][1]);
			}else if(!!o.s[i].fillRadial){
				var grd = ctx.createRadialGradient( o.s[i].fillRadial[0][0],
										o.s[i].fillRadial[0][1],
										o.s[i].fillRadial[0][2],
										o.s[i].fillRadial[1][0],
										o.s[i].fillRadial[1][1],
										o.s[i].fillRadial[1][2]);
			}
			if(!!o.s[i].lineLinear){
				var grd1 = ctx.createLinearGradient(o.s[i].lineLinear[0][0],
																						o.s[i].lineLinear[0][1],
																						o.s[i].lineLinear[1][0],
																						o.s[i].lineLinear[1][1]);
			}
			//边框或线条宽度
			if(!!o.s[i].width){
				ctx.lineWidth=o.s[i].width;
			};
			//边框或线条颜色
			if(!!o.s[i].color){
				ctx.strokeStyle=o.s[i].color;
			};
			//边框或线条线性渐变
			if(!!o.s[i].lineLinearcolor){
				for (var n = 0; n < o.s[i].lineLinearcolor.length; n++) {
					grd1.addColorStop(o.s[i].lineLinearcolor[n][0], o.s[i].lineLinearcolor[n][1]);		    	
				}
				ctx.strokeStyle = grd1;
			};
      //填充色及渐变
				if(!!o.s[i].fillcolor){
					for (var n = 0; n < o.s[i].fillcolor.length; n++) {
						grd.addColorStop(o.s[i].fillcolor[n][0], o.s[i].fillcolor[n][1]);		    	
					}
						ctx.fillStyle = grd;				 
				}else{
					ctx.fillStyle = o.s[i].fillbgcolor;
				};		  
			//创建矩形或圆或线条或文本
			transform(ctx,o.s[i]);
			if(!!o.s[i].arc){
				ctx.arc(o.s[i].arc[0],o.s[i].arc[1],o.s[i].arc[2],o.s[i].arc[3],o.s[i].arc[4]);	
			}else if(!!o.s[i].rect){
				ctx.rect(o.s[i].rect[0],o.s[i].rect[1],o.s[i].rect[2],o.s[i].rect[3]);
			}else if(!!o.s[i].line){
				//设置线条端点样式,可选值round(圆形线帽),square(方形线帽),butt(平直)
				if(!!o.s[i].tou) ctx.lineCap=o.s[i].tou;
				//设置两条线相交拐角类型,bevel(斜角),round(创建圆角),miter(尖角)                   
				if(!!o.s[i].jiao) ctx.lineJoin=o.s[i].jiao; 
				ctx.moveTo(o.s[i].line[0][0],o.s[i].line[0][1]);
				//中间点               
				for (var g = 1; g <o.s[i].line.length; g++) {
				 ctx.lineTo(o.s[i].line[g][0],o.s[i].line[g][1]);
				}
				if(o.s[i].close) ctx.closePath();
			}else if(!!o.s[i].fillText || !!o.s[i].strokeText){
				//字体设置
				if(o.s[i].font) ctx.font=o.s[i].font;
				if(!!o.s[i].fillText)
					ctx.fillText(o.s[i].fillText[0],o.s[i].fillText[1],o.s[i].fillText[2],o.s[i].fillText[3]);       
				if(!!o.s[i].strokeText)
				ctx.strokeText(o.s[i].strokeText[0],o.s[i].strokeText[1],o.s[i].strokeText[2],o.s[i].strokeText[3]);		
			}
			//填充
			if(!!o.s[i].fill){
				ctx.fill();
			}
			ctx.stroke();
		}
	}
}

function transform(ctx,obj){
	if(!!obj.translate) ctx.translate(obj.translate[0],obj.translate[1]);
	if(!!obj.scale) ctx.scale(obj.scale[0],obj.scale[1]);
	if(!!obj.rotate) ctx.rotate(obj.rotate);
}

// canvas({
// 	dom:div,
// 	s:[
// 			{
// 			line:[[0,0],[100,160],[150,60]],
// 			width:2,
// 			color:"red",
// 			tou:"round",
// 			jiao:"round",
// 			close:true,
// 			fill:true,
// 			lineLinear:[[0,0],[150,60]],                        
// 			 lineLinearcolor:[[0.1,"red"],[0.3,"green"],[1,"pink"]],
// 			 fillLinear:[[0,0],[150,150]],                   
// 			//fillRadial:[[50,50,5],[50,50,30]],           
// 			fillcolor:[[0,"red"],[1,"blue"]], 
// 			fillbgcolor:"blue",
// 			scale:[0.5,0.5],
// 			rotate:20*Math.PI/180,
// 			translate:[50,50],
// 			},
// 			{
// 			rect:[10,10,100,150],
// 			width:5,
// 			color:"red",
// 			fill:true,
// 			lineLinear:[[0,0],[0,100]],                        
// 			 lineLinearcolor:[[0.1,"red"],[0.6,"green"],[1,"pink"]],
// 			 fillLinear:[[0,0],[100,150]],                   
// 			//fillRadial:[[50,50,5],[50,50,30]],           
// 			fillcolor:[[0,"red"],[1,"blue"]], 
// 			fillbgcolor:"blue" ,
// 			scale:[2,2],
// 			rotate:20*Math.PI/180,
// 			translate:[50,50],
// 			},
// 			{
// 			arc:[150,150,40,0,2*Math.PI],
// 			width:5,
// 			color:"blue",
// 			fill:true,
// 			lineLinear:[[0,0],[200,200]],                        
// 			lineLinearcolor:[[0.1,"red"],[0.6,"green"],[1,"pink"]],
// 			 //fillLinear:[[0,0],[100,150]],                   
// 			fillRadial:[[150,150,5],[150,150,30]],           
// 			fillcolor:[[0,"red"],[1,"blue"]], 
// 			fillbgcolor:"green" 
// 			},
// 			{
// 			fillText:["aa242a",50,50,50],
// 			//strokeText:["aa242a",30,30,50], 
// 			font:"bold 40px Arial",
// 			width:2,
// 			color:"#fff",
// 			fill:true,
// 			//lineLinear:[[0,0],[100,100]],                        
// 			 //lineLinearcolor:[[0.1,"red"],[1,"green"]],
// 			 fillLinear:[[0,0],[0,-30]],                   
// 			//fillRadial:[[50,50,5],[50,50,100]],       
// 			fillcolor:[[0,"red"],[1,"#fff"]], 
// 			//fillbgcolor:"#fff" 
// 			},
//   ],
//   shadowColor:"red",                  //阴影颜色
// 	shadowBlur:5,                       //阴影扩张
// 	shadowOffsetX:2,                    //阴影水平范围
// 	shadowOffsetY:3                     //阴影垂直范围  
// })