canvas 的 save和restore
程序员文章站
2024-03-24 09:07:58
...
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#canvas{
border: 1px solid red;
}
</style>
</head>
<body>
<canvas id="canvas" width="800" height="400"></canvas>
<script>
var canvas = document.getElementById("canvas");
var context = canvas.getContext('2d');
context.lineWidth = "10";
context.strokeStyle = "#fe9901";
context.translate(canvas.width / 2, canvas.height / 2);
// context.save();
context.rotate( 30 / 180 * Math.PI);
context.beginPath();
context.moveTo(0, 0);
context.lineTo(200, 200);
context.stroke();
// context.restore();
context.rotate( 30 / 180 * Math.PI);
context.beginPath();
context.moveTo(0, 0);
context.lineTo(200, 200);
context.stroke();
</script>
</body>
</html>
首先 context.save存储的是 canvas 的一些属性和坐标系相关的一些值(比如旋转角度,平移量)
如上代码: 如果没有 save和restore,则会出现如下图的情况
旋转的角度是一致的,绘制的路径都是一样的,但是却没有重合
如果将注释放开,则会重合
另外:如果代码是这样的
var canvas = document.getElementById("canvas");
var context = canvas.getContext('2d');
context.save();
context.lineWidth = "10";
context.strokeStyle = "#fe9901";
context.translate(canvas.width / 2, canvas.height / 2);
context.rotate( 30 / 180 * Math.PI);
context.beginPath();
context.moveTo(0, 0);
context.lineTo(200, 200);
context.stroke();
context.restore();
context.rotate( 30 / 180 * Math.PI);
context.beginPath();
context.moveTo(0, 0);
context.lineTo(200, 200);
context.stroke();
那么绘制的图如下:
推荐阅读
-
canvas 的 save和restore
-
自定义View画布save()和restore()
-
Yii 2中的load()和save()示例详解
-
Yii 2中的load()和save()示例详解
-
Android的Paint、Canvas和Path基本使用总结
-
H5 canvas中width、height和style的宽高区别详解
-
canvas save()和canvas restore()状态的保存和恢复使用方法及实例
-
Oracle rman中restore和recover的区别
-
基于canvas.toDataURL实现video和webGl的截图功能
-
微信小程序中的canvas 文字断行和省略号显示功能的处理方法