Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Canvas 的save()与 restore()的详细介绍

Canvas 的save()与 restore()的详细介绍

作者头像
tianyawhl
发布于 2019-04-04 02:01:28
发布于 2019-04-04 02:01:28
5.1K06
代码可运行
举报
文章被收录于专栏:前端之攻略前端之攻略
运行总次数:6
代码可运行

save()和restore()是用来保存和恢复canvas状态的,都没有参数。 Canvas的状态就是当前画面应用的所有样式和变形的一个快照。

Canvas状态存储在栈中,每当save()方法被调用后,当前的状态就被推送到栈中保存。一个绘画状态包括:

1、当前应用的变形(即移动,旋转,和缩放) 2、strokeStyle,fillStyle,globalAlpha,lineWidth,lineCap,lineJoin,miterLimit,shadowOffsetX,shadowOffsetY shadowBlur,shadowColor,globalCompositeOperation的值 3、当前的裁剪路径(clipping path)

你可以调用任意多次save方法

每一次调用restore方法,上一次保存的状态就从栈中弹出,所有设定都恢复。

例一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 function draw(){
   var ctx = document.getElementById("canvas").getContext("2d");
   ctx.fillRect(0,0,150,150);
   ctx.save();  //默认设置
   ctx.fillStyle = "#09f";
   ctx.fillRect(15,15,120,120); //填充当前设置的#09f颜色
   ctx.restore();
   ctx.fillRect(30,30,90,90); //填充默认的黑色
 }

例二

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>
var ctx = document.getElementById("canvas").getContext("2d");
ctx.strokeStyle = "pink";
ctx.lineWidth = 3;
ctx.save();//默认设置
function drawLine(){
  ctx.beginPath();
  ctx.moveTo(50,50);
  ctx.lineTo(100,100);
  ctx.stroke();
}
 function draw(){
   ctx.strokeStyle = "green";
   ctx.save();
   ctx.restore();
   ctx.restore();
   drawLine();
 }
 draw()  //线为pink  
 draw()  //线为green  
</script>

第一次执行draw() 画出的线为pink的原因:因为第一次执行js代码执行2次ctx.save(),对应着2次ctx.restore();返回到颜色为pink的状态

第二次执行只执行一次ctx.save(),执行2次的ctx.restore()效果跟一次是一样的,所以为绿色

注意:一般ctx.save()与ctx.restore()是成对出现的,当ctx.restore()的个数多余ctx.save(),多余的并没有效果。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/11/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第156天:canvas(三)
​ translate方法接受两个参数。x 是左右偏移量,y 是上下偏移量,如右图所示。
半指温柔乐
2018/09/11
5940
第156天:canvas(三)
第155天:canvas(二)
​ 这个属性影响到 canvas 里所有图形的透明度,有效的值范围是 0.0 (完全透明)到 1.0(完全不透明),默认是 1.0。
半指温柔乐
2018/09/11
5780
第155天:canvas(二)
Day 3 学习Canvas这一篇文章就够了
一、canvas简介 ​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。 ​ 它最初由苹果内部使用自己MacOS X WebKit推出,供应用程序使用像仪表盘的构件和 Safari 浏览器使用。 后来,有人通过Gecko内核的浏览器 (尤其是Mozilla和Firefox),Opera和Chrome和超文本网络应用技术工作组建议为下一代的网络技术使用该元素。 ​ Canvas是由HTML代码配合高度和宽度属性而定义出的可绘制区域。JavaScript代码可以访问该区域,类似于其他通用的二维API,通过一套完整的绘图函数来动态生成图形。 ​ Mozilla 程序从 Gecko 1.8 (Firefox 1.5)开始支持 <canvas>, Internet Explorer 从IE9开始<canvas> 。Chrome和Opera 9+ 也支持 <canvas>。 二、Canvas基本使用 2.1 <canvas>元素
IT人一直在路上
2019/09/16
1.3K0
Day 3 学习Canvas这一篇文章就够了
canvas详细教程! ( 近1万字吐血总结)
今天为大家带来的是我已经写了很久了的canvas详细教程,按照文章的案例一个一个敲下来保证你可以学会绘制很多图案和动画,对入门canvas很有帮助!
用户9999906
2022/12/22
4.8K0
给pugjs的stun主题添加canvas时钟
首先隔了这么久才继续进行更新的原因是网站备案和毕业设计,加上刚入职没有时间去进行内容更新,以后会继续更新了
impressionyang
2020/08/27
1.2K0
给pugjs的stun主题添加canvas时钟
Canvas3 绘图和重叠
在绘制图形时,如果画布上已经有图形,就涉及到一个问题:两个图形如何组合。可以通过CanvasRenderingContext2D.globalCompositeOperation属性来设置组合方式
张哥编程
2024/12/17
2950
Canvas3 绘图和重叠
Canvas基本动画-太阳系的动画 原
1、清空canvas 除非接下来要画的内容会完全充满canvas(例如背景图),否则你需要清空所有,最简单的方法是使用clearRect方法 2、保存canvas状态 如果你要改变一些会改变canvas状态的设置(样式,变形之类的),又要在每画一帧之时都是原始状态的话,你需要先保存一下 3、绘制动画图形 4、恢复canvas状态 如果已经保存了canvas的状态,可以先恢复它,然后重绘下一帧。
tianyawhl
2019/04/04
9910
canvas学习笔记(八)—- 基本动画
1.用window.setInterVal()、window.setTimeOut()和window.requestAnimationFrame()来定期执行一个指定函数
Java架构师必看
2021/08/19
8210
HTML5(五)——Canvas API
Canvas API(画布)提供了一个通过 javascript 和 html 的 canvas 元素来在网页上实时绘制图形的方式。可用于动画、游戏、图标、图片编辑等多个方面。
呆呆
2021/09/29
9000
canvas学习笔记(六)—-变形
5.scale(scaleWidth,scaleHeight)缩放的长度和宽度(1=100%,0.5=50%)
Java架构师必看
2021/08/19
4260
canvas 状态管理
canvas 绘图时会根据当前状态来绘制。很多的 canvas 库都利用到这一特性。比如 p5.js 利用了 canvas 状态特性衍生出 push 和 pop 函数实现状态隔离(既然提到了,下一篇就讲这个)。
德育处主任
2023/02/26
9630
canvas 状态管理
Canvas 从进阶到退学
接着 《Canvas 从入门到劝朋友放弃(图解版)》 ,本文继续补充 canvas 基础知识点。
德育处主任
2022/12/13
2.3K0
Canvas 从进阶到退学
三天学会HTML5——SVG和Canvas的使用
在第一天学习了HTML5的一些非常重要的基本知识,今天将进行更深层学习 首先来回顾第一天学习的内容,第一天学习了新标签,新控件,验证功能,应用缓存等内容。 第2天将学习如何使用Canvas 和使用SVG 实现功能 Lab1—— 使用Canvas Canvas 是指定了长度和宽度的矩形画布,我们将使用新的HTML5 JavaScript,可使用HTML5 JS API 来画出各种图形。 初始化 1. 创建HTML页面 <html> <head></head> <body></body> </html> 2.
葡萄城控件
2018/01/10
3K0
三天学会HTML5——SVG和Canvas的使用
canvas的绘图2
在绘图代码上如果不加save属性会怎么样呢?则默认是红色的,保存一次颜色,需要加一次save.
张哥编程
2024/12/17
1370
canvas的绘图2
canvas 系列学习笔记三《样式和颜色》
通过上下文可以设置strokeStyle (线条颜色) 和 fillStyle (填充颜色)。 设置完之后画线和填充就是设置的颜色。
星宇大前端
2022/09/28
6820
canvas 系列学习笔记三《样式和颜色》
Canvas
http://www.w3c.org/TR/2dcontext/ https://html.spec.whatwg.org/
jinghong
2020/05/09
13.3K0
Canvas
Canvas
注意canvas 的 width 和 height 不要用 css 来设定,如果用 css 样式来设置,会变形和失真
小丞同学
2021/08/16
1.5K0
canvas之clip使用 原
裁切路径和普通的canvas图形差不多,不同的是它的作用是遮罩,用来隐藏路径以外的部分。 clip() 将当前正在构建的路径转换为当前的裁剪路径,默认情况下,canvas有一个与它自身一样大的裁切路径(也就是没有裁切效果)
tianyawhl
2019/04/04
8540
前端canvas基础复习,canvas学习笔记,持续记录
最开始学html5的时候,曾特意了解过canvas,还记得当时为了搞明白canvas的api,绞尽脑汁了很多个日日夜夜。
房东的狗丶
2023/02/17
3.3K0
前端canvas基础复习,canvas学习笔记,持续记录
canvas绘制闹钟-方法2 原
 drawBackground()里面的ctx.save() 为什么不能放到上面的原因:一般ctx.save() 与ctx.restore()是成对出现的。ctx.save() 的作用是保存状态,ctx.restore()指弹出保存的状态来使用,如果此函数中没有ctx.save(),则在draw()中执行ctx.restore(); 就没有意义,因为没有已经保存的状态,导致绘图有问题。
tianyawhl
2019/04/04
7000
相关推荐
第156天:canvas(三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档