save()和restore()方法是绘制复杂图形必不可少的方法.它们分别是用来保存和恢复 canvas 状态的,都没有参数。

Canvas 状态是以堆(stack)的方式保存的,每一次调用 save 方法,当前的状态就会被推入堆中保存起来。这种状态包括:当前应用的变形(即移动,旋转和缩放,见下):
strokeStyle
fillStyleglobalAlphalineWidthlineCaplineJoinmiterLimitshadowOffsetX,shadowOffsetYshadowBlurshadowColorglobalCompositeOperation 的值

你可以调用任意多次 save 方法。每一次调用 restore 方法,上一个保存的状态就从堆中弹出,所有设定都恢复。

举个save 和 restore 的应用例子吧。

我们尝试用这个连续矩形的例子来描述 canvas 的状态堆是如何工作的。
第一步是用默认设置画一个大四方形,然后保存一下状态。改变填充颜色画第二个小一点的白色四方形,然后再保存一下状态。再次改变填充颜色绘制更小一点的蓝色四方形。然后我们调用了restore方法将设置回到前一个save状态下的fillStyle="white",即在不设定颜色值的情况下再绘制最小的矩形时其添充色为白色。
一旦我们调用 restore,状态堆中最后的状态会弹出,并恢复所有设置。如果不是之前用 save 保存了状态,那么我们就需要手动改变设置来回到前一个状态,这个对于两三个属性的时候还是适用的,一旦多了,我们的代码将会猛涨。 简而言之restore方法就可以理解成将其对应的当前save状态下的设置全部恢复为前一个状态

代码:
<script type="text/javascript">
window.οnlοad=function(){
 var ctx=document.getElementByIdx_x_x("canvas").getContext("2d");
 ctx.fillRect(10,10,150,150);

ctx.save();
 ctx.fillStyle="white";
 ctx.fillRect(30,30,110,110);

ctx.save();
 ctx.fillStyle="blue";
 ctx.fillRect(50,50,70,70);
 ctx.restore();//回到上一个状态,即 ctx.fillStyle="white";

ctx.save();
 ctx.fillRect(70,70,30,30);//所以此处没有设定fillStyle的时候颜色为white,注意哦!如果在白色矩形后面也restore一下刚此处的fillStyle就为黑色了
 ctx.restore();
}
</script>

转载于:https://www.cnblogs.com/Ironman725/p/11110956.html

理解Canvas的save()和restore()方法相关推荐

  1. Canvas的save和restore方法

    2019独角兽企业重金招聘Python工程师标准>>> Canvas里的两个重要方法,一直很疑惑. save和restore方法是成对出现的,但是restore必然对应一个save方 ...

  2. canvas 的save()和restore()方法

    应用到画布上面的效果是可以累积的,因而就可以利用几个简单的函数来"组合"出效果来.例如,在向屏幕上绘制之前,可能会有一艘飞船需要旋转.变换 和缩放.因为所有效果都对画布起作用,所以 ...

  3. canvas中save和restore的理解和使用

    canvas中save和restore的理解和使用 理解save和restore不一定总是成对出现的 太阳系 理解save和restore不一定总是成对出现的 每个 canvas 的 context ...

  4. Canvas的save和restore

    在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或View的onDraw方法. onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布. 在onDraw方法里,我们经常会 ...

  5. canvas理解:一看就懂的save和restore

    一看就懂的save和restore 对于save()和restore()方法,我一开始有一个错误的理解,以为每一步都save()之后restore()就等同于command + z(或者ctrl + ...

  6. Android画布的保存,Android canvas用法介绍之save()和restore()

    一. 首先讲一下canvas的save 和 restore功能. 这是canvas很有魅力的一个部分. onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布. 在onDraw方 ...

  7. canvas像素操作、save与restore、合成与变形

    一.canvas像素操作 (1)获取图像像素 (2)写入像素数据 (3)创建像素数据 (4)小案例,将canvasA画布的图像复制到canvasB中 二.canvas的save与restore 三.c ...

  8. Android 中Canvas的save(),saveLayer()和restore()解析

    1.save()方法 : 用来保存Canvas的状态,save()方法之后的代码,可以调用Canvas的平移.放缩.旋转.裁剪等操作! 2.restore()方法: 用来恢复Canvas之前保存的状态 ...

  9. php画钟,canvas如何绘制钟表的方法_html5教程技巧

    这篇文章主要介绍了HTML5中的canvas如何绘制钟表的方法的相关资料,小编觉得HTML真的是越来越强大的,现在分享给大家,也给大家做个参考.对HTML的小伙伴们可以一起跟随小编过来看看吧 本文介绍 ...

最新文章

  1. android tesseract-ocr实例教程(包含中文识别)(附源码)
  2. MarkDown的介绍
  3. java编译器分析_Java反编译器的剖析
  4. 《Python Cookbook 3rd》笔记(4.11):同时迭代多个序列
  5. 264,avs中Skip宏块与Direct预测模式 ,对称模式的区别
  6. Windows10安装VMware(图文教程)
  7. ASP.NET MVC传递Model到视图的多种方式之通用方式的使用
  8. php 字符串加,php字符串如何增加
  9. 如何提升Wi-Fi速度 学会更改无线信道
  10. 使用ExtendSim进行 化学工程、采矿作业和工艺流程仿真
  11. 计算机博弈大赛源代码,2020计算机博弈大赛幻影围棋分组第一天 信息交互模块...
  12. 苹果手机上怎么打开html,苹果手机信息怎么打开浏览器
  13. 利用纯m文件生成ui(二)
  14. IP技术 -- 3 路由器彩光
  15. Buffer基本使用
  16. Wallpaper Engine pkg壁纸文件提取工具
  17. OCMJ8X15B金鹏液晶屏驱动程序+字库规律
  18. 985 211计算机考研科目,考研想上985/211,你各科分数至少要考这么多!
  19. 广州车展直击:路特斯超高端矩阵驾临
  20. 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

热门文章

  1. python一直报缩进错误_如何避免Python中的缩进错误
  2. 燕赵志愿云如何认证_如何获得云安全专家CCSP认证
  3. xa 全局锁_分布式事务如何实现?深入解读 Seata 的 XA 模式
  4. 服务器清理c盘日志文件,清理WIN2003服务器C盘垃圾的批处理
  5. 关闭antimal_i wanna be the brown animal键位怎么操作玩法攻略
  6. Pytorch框架的深度学习优化算法集(优化中的挑战)
  7. 洛谷P3368 【模板】树状数组 2(Python和C++代码)
  8. 【响应式Web前端设计】Login Demo
  9. cocos creator 获取当前时间_前端开发者入门 Creator 必读吧
  10. android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...