HTML5 Canvas 开发 绘图方法整理 【十三、Canvas重点之:状态 】
2018-02-20 13:36
417 查看
Canvas最重要的两个概念,一个是路径,另一个就是状态了。
要知道,Canvas 是基于“状态”来绘制的,每次绘制(fill() 或 stroke() )的时候都会检查一次程序中所有的“状态”,如果当前状态没有任何手动的改变,那么就会一直持续下去。
clip() 从原始画布中剪切任意形状和尺寸。
clip()可以将某个基本图形设定为“剪切区域”, 一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。
可以在使用 clip() 方法前通过使用 save() 方法对当前画布区域进行保存,并在以后的任意时间对其进行恢复(通过 restore() 方法)。
另外,clip()不支持strokeRect() 和 ctx.fillRect() 这两个方法;
如果一定要用的话请用 rect() 代替。
<script> window.onload=function () { let cans = document.getElementById("myCanvas"); let ctx = cans.getContext("2d"); ctx.strokeStyle="#9317F5"; ctx.lineWidth="3"; ctx.rect(30,30,300,200); ctx.stroke(); ctx.clip(); //将上面定义的矩形作为一个绘图区域, 后面绘制的图形再大不会超出这个区域 ctx.beginPath(); ctx.arc(200,200,75,0,360*Math.PI/180); ctx.closePath(); ctx.fillStyle="#FF89C9"; ctx.fill(); } </script>
效果图:
如果设定了“剪切区域”后,还想在区域外面在 继续绘图,这时候就需要用到 状态 save() 和 restore();
save() 保存当前环境的状态
restore() 返回之前保存过的路径状态和属性
这两种一般情况下也都是配对使用的;
ctx.save(); //将状态保存起来 ctx.beginPath(); ctx.arc(150,150,110,0,360*Math.PI/180); ctx.closePath(); ctx.strokeStyle="#15399B"; ctx.stroke(); ctx.clip(); //定义剪切的图形,超出部分不显示 let pic=new Image(); pic.src="img/img5.png"; pic.onload=function () { ctx.drawImage(pic,50,10); }; btn.onclick=function () { ctx.restore(); //在这恢复到定义剪切前的状态, 继续绘制 let img=new Image(); img.src="img/img4.png"; img.onload=function () { ctx.drawImage(img,220,100); } }
效果图:
Canvas 状态的保存和恢复 一般用于在图形或图片被裁减 或 变形时使用,或者当部分属性改变的时候使用,例如:fillStyle 、strokeStyle、 font 等;
Canvas在以下状态改变的时候可以使用save() 来保存当前状态 并在需要结束的时候用restore() 恢复到保存前的状态;
包含:
填充效果: fillStyle、
描边效果:strokeStyle 、
线条效果:lineCap,lineWidth等、
文本效果:font、textAlign等、
阴影效果: shadowBlur 、 shadowColor等 、
全局属性:globalAlpha 、globalCompositeOperation
需要注意的是save() 只能用来保存“状态”, 不能保存“图形”,也不是更新路径,
对于Canvas 来说 只有一个!上下文环境, 对于路径和状态 这两种一定要好好区分开
再举一个利用“状态” 设置“跨行取色”的样式:
ctx.lineWidth="5"; ctx.strokeStyle="#B946C6"; ctx.save(); ctx.strokeRect(10,50,200,10); ctx.strokeStyle="#0695FF"; ctx.strokeRect(10,100,200,10); ctx.restore(); ctx.strokeRect(10,150,200,10); //最后一句取得是第一次设置的颜色
效果图:
相关文章推荐
- HTML5 Canvas 开发 绘图方法整理 【十二、Canvas重点之:路径 】
- HTML5 Canvas 开发 绘图方法整理 【九、Canvas旋转、缩放】
- HTML5 Canvas 开发 绘图方法整理 【十、Canvas渐变、图形渐变&&文字渐变】
- HTML5 Canvas 开发 绘图方法整理 【三、canvas线条样式、线帽】
- HTML5 Canvas 开发 绘图方法整理 【十一、Canvas图形阴影&&文字阴影效果】
- HTML5 Canvas 开发 绘图方法整理 【五、canvas text / 文本、文字相关】
- HTML5 Canvas 开发 绘图方法整理 【十四、将 Canvas画布 作为图片保存并下载】
- HTML5 Canvas 开发 绘图方法整理 【六、canvas image /canvas绘制图片、平铺图片】
- HTML5 Canvas 开发 绘图方法整理 【一、需要了解的基础内容】
- HTML5 Canvas 开发 绘图方法整理 【四、canvas曲线图形 / 圆形】
- HTML5 Canvas 开发 绘图方法整理 【二、canvas直线 & canvas矩形】
- HTML5 Canvas 开发 绘图方法整理 【八、Canvas 转换】
- HTML5 Canvas 绘图方法整理 【十八、Canvas动画/ requestAnimationFrame() 兼容】
- HTML5 Canvas 绘图方法整理 【十七、Canvas透明度 / 图形叠加、层次、冲突】
- HTML5 Canvas 绘图方法整理 【十五、Canvas页面交互: 鼠标事件 】
- HTML5 Canvas 绘图方法整理 【十六、Canvas键盘事件、keyCode对照表】
- HTML5 canvas绘图基本使用方法
- [HTML5-SVG,VML,CANVAS]Web开发中的矢量绘图(vml,svg)处理和应用
- HTML5 canvas绘图基本使用方法