Canvas

canvas是一个html标签,但是给js提供了接口,通过js可以在操作canvas实现一些效果。兼容性较差,IE9及以上兼容。

现在canvas主要应用于游戏、报表、地图、制作炫酷效果、banner、图形编辑器、模拟器等。

canvas元素的属性:width、height。

                    方法:getContext() 获取绘图环境  Context对象是js操作canvas的接口。参数:2d、webgl

书写格式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Canvas</title>
</head>
<body>
    <canvas id="myCanvas">您的浏览器不支持canvas,请升级浏览器。</canvas><!-- 默认 width:300, height:150 -->
    <script>
	//获取canvas元素(画布)
	var canvas = document.querySelector("#myCanvas");
	//获取画布环境
	var ctx = canvas.getContext("2d");
	//设置宽、高(不能在style标签中设置)
	ctx.width = 500;
	ctx.height = 500;

	//绘制路径
	ctx.beginPath(); //路径开始,开启新的路径(状态) 并且结束前面的路径
  	ctx.moveTo(x,y); //起始点坐标
  	ctx.lineTo(x,y);
  	ctx.closePath(); //路径闭合,结束当前路径 并且使当前路径闭合
	//描边路径
  	ctx.stroke();
  	ctx.strokeStyle = "red"; //设置描边颜色
  	ctx.lineWidth = 1; //设置描边线条宽度,默认1
	//填充路径
  	ctx.fill();
  	ctx.fillStyle = "red"; //设置填充颜色

	//绘制矩形
  	ctx.rect(x,y,w,h);
  	//快速矩形工具
  	ctx.strokeRect(x,y,w,h); //绘制描边矩形
  	ctx.fillRect(x,y,w,h); //绘制填充矩形
	//清除矩形
  	ctx.clearRect(x,y,w,h);
	//清除画布
  	canvas.width = canvas.width;

	//绘制圆弧
 	ctx.arc(x,y,r,startAngle,endAngle,true|false); //最后一个参数表示逆时针或顺时针,可选。默认false顺时针

	//绘制文字
  	ctx.font = "(加粗 倾斜) 字体大小 字体";
	ctx.textAlign = "start"; //文字水平对齐方式。参数:start、end、left、right、center,默认start
	ctx.textBaseLine = "alphabetic"; //文字垂直对齐方式。参数:alphabetic、top、bottom、middle,默认alphabetic
	ctx.fillText(text,x,y); //绘制填充文字
	ctx.strokeText(text,x,y); //绘制描边文字
	ctx.measureText(text); //获取文本在画布中所占的宽度

	//绘制图片
	var img = document.createElement('img');//创建img对象  var img = new Image();不推荐使用
	ctx.drawImage(img,x,y);//基本绘图
	ctx.drawImage(img,x,y,w,h);//绘图并设置大小
	ctx.drawImage(img,sx,sy,sw,sh,x,t,w,h);//裁剪图片(先写原图的坐标大小,再写画布的坐标大小)

	//绘制阴影
	ctx.fillStyle = 'red';
	ctx.shadowColor = 'pink'; //设置阴影的颜色
	ctx.shadowBlur = 5; //设置阴影的模糊程度
	ctx.shadowOffsetX = 5; //设置阴影的水平偏移量
	ctx.shadowOffsetY = 5; //设置阴影的垂直偏移量
	ctx.fillRect(x,y,w,h);
	ctx.strokeRect(x,y,w,h);

	//绘制线性渐变(相对于绘图环境)
	var grd = ctx.createLinearGradient(x0,y0,x1,y1); //参数:x0,y0起始位置 x1,y1结束位置
	grd.addColorStop(number,color); //number 0-1之间
	//把渐变填充到矩形
	ctx.fillStyle = grd;
	ctx.fillRect(x,y,w,h);

	//绘制径向渐变(相对于绘图环境)
	var grd = ctx.createRadialGradient(x0,y0,r0,x1,y1,r1); //参数:x0,y0开始圆的起始位置 r0开始圆的半径 x1,y1结束圆的位置 r1结束圆的半径
	grd.addColorStop(0,'red');
	//把渐变填充到矩形
	ctx.fillStyle = grd;
	ctx.fillRect(x,y,w,h);

	//绘制背景图
	//创建图片元素
	var img = document.createElement('img');
	img.addEventListener('load',function() {//监听图片加载完毕
	    //绘制背景图片
	    var pat = ctx.createPattern(img,repeat);//repeat参数:repeat(默认) 水平和垂直方向重复;repeat-x 水平方向重复;repeat-y 垂直方向重复;no-repeat 不重复。
	    //填充矩形
	    ctx.fillStyle = pat;
	    ctx.fillRect(x,y,w,h);
	    ctx.strokeRect(x,y,w,h);
	})

	//变换--缩放(相对于绘图环境 先变换,后绘图)
	ctx.scale(w,h);

	//变换--位移(相对于绘图环境 先变换,后绘图)
	ctx.translate(w,h);

	//变换--旋转(相对于绘图环境 先变换,后绘图)
	ctx.rotate(angle);

	//绘图环境的保存和释放
	ctx.save(); //保存当前的绘图环境
	ctx.restore(); //释放前面保存的绘图环境

	//设置不透明度(相对于绘图环境)
	ctx.globalAlpha = .5; //参数:0-1之间小数

	//裁剪画布(相对于绘图环境)
	ctx.rect(150,150,200,300); //先定义一个路径
	ctx.stroke();
	ctx.clip(); //沿路径包围的部分裁剪

	//画布保存为Base64编码
	var img = document.createElement('img');
	img.src = canvas.toDataURL('image/jpeg',1); //参数一:type,图片的mime类型;参数二:压缩比(0-1),1为无损压缩
	document.body.appendChild(img);

	//画布渲染画布--canvas优化,尽量减少渲染次数
	canvas.style.diaplay = 'none'; //将内容绘制到画布中,设置样式为隐藏
	ctx1.drawImage(canvas,0,0); //把隐藏的canvas渲染到另一个显示的canvas上  参数:渲染的canvas,x,y

	//线条样式
	ctx.lineCap = 'butt'; //两端样式 值:butt(默认)|round圆形|square正方形
	ctx.lineJoin = 'miter'; //两线相交样式 值:miter(默认)尖角|round圆角|bevel斜角
	ctx.miterLimit = '10'; //设置尖角长度(配合lineJoin='miter'时才有效),默认值10

	//贝塞尔曲线
	ctx.moveTo(x,y); //确定起始点
	ctx.quadraticCurveTo(cpx,cpy,x,y); //二次方曲线    参数:控制点x坐标,控制点y坐标,结束点x坐标,结束点y坐标
	ctx.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y); //三次方曲线    参数:控制点一x坐标,控制点一y坐标,控制点二x坐标,控制点二y坐标,结束点x坐标,结束点y坐标

	//切线画弧
	ctx.arcTo(x1,y1,x2,y2,r); //端点一x坐标,端点一y坐标,端点二x坐标,端点二y坐标,半径

	//判断点是否在路径中  返回true | false
	ctx.isPointInPath(x,y);
    </script>
</body>
</html>

注:相对于绘图环境进行设置的渐变、变换、不透明度、裁剪等,都需要先设置,后绘图。

快速矩形工具strokeRect()和fillRect()、绘制文字strokeText()和fillText()不是路径,不需要beginPath()和closePath()。

转载于:https://my.oschina.net/u/3502371/blog/1058178

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值